Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1203|回复: 0

[默认分类] selenium+python自动化94-鼠标事件(ActionChains)源码详解

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-4-4 10:47:54 | 显示全部楼层 |阅读模式
    ActionChains简介
    actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。
    这对于做更复杂的动作非常有用,比如悬停和拖放。
    actionchains也可以和快捷键结合起来使用,如ctrl,shif,alt结合鼠标一起使用
    当你使用actionchains对象方法,行为事件是存储在actionchains对象队列。当你使用perform(),事件按顺序执行。

    方法一:可以写一长串
    1. [code]menu = driver.find_element_by_css_selector(".nav")
    2. hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
    3. ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
    复制代码
    [/code]

    方法二:可以分几步写
    1. [code]menu = driver.find_element_by_css_selector(".nav")
    2. hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
    3. actions = ActionChains(driver)
    4. actions.move_to_element(menu)
    5. actions.click(hidden_submenu)
    6. actions.perform()
    复制代码
    [/code]
    无论哪种方式,操作都是按照调用的顺序执行挨个执行!
    方法介绍
    1.以下提到的Keys类,是selenium里面的键盘事件类,导入方法:

    from selenium.webdriver.common.keys import Keys

    2.鼠标事件使用导入方法:

    from selenium.webdriver.common.action_chains import ActionChains
    1. [code]class ActionChains(object):
    2.     def __init__(self, driver):
    3.         self._driver = driver
    4.         self._actions = []
    5.     def perform(self):
    6.         # 执行行为事件
    7.     def click(self, on_element=None):
    8.         点击:
    9.         - 如果参数不写,那么点击的是当前鼠标位置
    10.         - 如果参数写定位到的元素对象element,那就是点这个元素
    11.     def click_and_hold(self, on_element=None):
    12.         鼠标左键按住某个元素
    13.         - 如果参数不写,那么点的是当前鼠标位置
    14.         - 如果参数写定位到的元素对象element,那就是点这个元素
    15.     def context_click(self, on_element=None):
    16.         鼠标右键点击
    17.         - 如果参数不写,那么点的是当前鼠标位置
    18.         - 如果参数写定位到的元素对象element,那就是点这个元素
    19.     def double_click(self, on_element=None):
    20.         双击鼠标
    21.         - 如果参数不写,那么点的是当前鼠标位置
    22.         - 如果参数写定位到的元素对象element,那就是点这个元素
    23.     def drag_and_drop(self, source, target):
    24.         按住源元素上的鼠标左键,然后移动到目标元素并释放鼠标按钮
    25.         - source: 按住鼠标的元素位置
    26.         - target: 松开鼠标的元素位置
    27.     def drag_and_drop_by_offset(self, source, xoffset, yoffset):
    28.         按住源元素上的鼠标左键,然后移动到目标偏移量并释放鼠标按钮。
    29.         - source: 按住鼠标的元素位置
    30.         - xoffset: X 轴的偏移量
    31.         - yoffset: Y 轴的偏移量
    32.     def key_down(self, value, element=None):
    33.         只发送一个按键,而不释放它。只应用于修饰键(控制、alt和shift)。
    34.         - value: 要发送的修饰符键。值在“Keys”类中定义。
    35.         - element: 定位的元素
    36.         如果element参数不写就是当前鼠标的位置
    37.         举个例子,按住 ctrl+c::
    38.         ActionChains(driver).key_down(Keys.CONTROL).send_keys("c").key_up(Keys.CONTROL).perform()
    39.     def key_up(self, value, element=None):
    40.         # 释放按键,配合上面的一起使用
    41.     def move_by_offset(self, xoffset, yoffset):
    42.         将鼠标移动到当前鼠标位置的偏移量
    43.          - xoffset: X轴 作为一个正整数或负整数移动到x偏移量
    44.          - yoffset: Y轴 偏移,作为正整数或负整数。
    45.     def move_to_element(self, to_element):
    46.         鼠标悬停
    47.         - to_element: 定位需要悬停的元素
    48.     def move_to_element_with_offset(self, to_element, xoffset, yoffset):
    49.         通过指定元素的偏移量移动鼠标。偏移量与元素的左上角相对
    50.         - to_element: 定位需要悬停的元素
    51.         - xoffset: X 轴偏移量
    52.         - yoffset: Y 轴偏移量
    53.     def release(self, on_element=None):
    54.         释放一个元素上的鼠标按钮。
    55.         - 如果参数不写,那么是当前鼠标位置
    56.         - 如果参数写定位到的元素对象element,那就是这个元素.
    57.     def send_keys(self, *keys_to_send):
    58.         发送到当前焦点元素
    59.         要发送的按键。修饰符键常数可以在“Keys”类。
    60.    
    61.     def send_keys_to_element(self, element, *keys_to_send):
    62.         发送到定位到的元素上
    63.         - element: 定位的元素
    64.         - keys_to_send: 要发送的按键。修饰符键常数可以在“Keys”类。
    复制代码
    [/code]
    源码可以在以下目录查看:Lib\site-packages\selenium\webdriver\common\action_chains.py
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-26 08:01 , Processed in 0.361926 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表