Selenium3 Python WebDriver API源码探析(10):动作链(ActionChains):鼠标事件和键盘事件

鼠标、键盘事件是我们利用Selenium操控浏览器的重要交互手段,主要由selenium\webdriver\common\action_chains.py中的ActionChains类实现。该类通过webdriver包对外暴露,即可使用from selenium.webdriver import ActionChains导入ActionChains类。

动作链(ActionChains)原理

动作链是一种低级交互方法,如鼠标移动、鼠标按钮操作、按键按下和上下文菜单交互。动作链对于复杂动作非常有效,比如悬停和拖放。

ActionChains类提供了两类方法:

  • 动作链基础方法
  • 各种动作方法

ActionChains类在实例化时,生成了两个类属性,一个为_driver,即WebDriver实例,另一个为_actions,初始为空列表,随后ActionChains实例在调用其他动作方法时,会先把需要执行的动作存储在_actions中,当ActionChains实例调用perform()方法时,才会真正执行动作。

动作链的调用模式有两种:

  • 链式语法
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
  • 命令队列
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()

ActionChains类动作链基础方法

perform()方法

作用:依次执行动作链中的每个动作。

reset_actions()方法

作用:清空待执行的动作链。

ActionChains类鼠标操作方法

move_to_element方法

作用:将鼠标从当前位置移动至某元素中心位置。
方法签名:ActionChains(driver).move_to_element(to_element)
参数:on_element,鼠标移动的目标元素。

click方法

作用:将鼠标移动至给定元素,然后点击该元素。
方法签名:ActionChains(driver).click(on_element=None)
参数:on_element,即将点击的元素,如果参数为None,点击鼠标当前位置。
原理:先执行move_to_element方法,再点击元素。

click_and_hold方法

作用:将鼠标移动至给定元素,然后在给定元素中间单击(不释放)。
方法签名:ActionChains(driver).click_and_hold(on_element=None)
参数:on_element,鼠标按下的元素,如果参数为None,点击鼠标当前位置。

context_click方法

作用:将鼠标移动至给定元素,然后用鼠标右键单击该元素。
方法签名:ActionChains(driver).context_click(on_element=None)
参数:on_element,鼠标右键单击的元素,如果参数为None,鼠标右键点击当前位置。
原理:先执行move_to_element方法,再右键点击元素。

double_click方法

作用:将鼠标移动至给定元素,然后用鼠标双击该元素。
方法签名:ActionChains(driver).double_click(on_element=None)
参数:on_element,鼠标双击的元素,如果参数为None,鼠标双击当前位置。
原理:先执行move_to_element方法,再双击元素。

release方法

作用:释放按在某元素上的鼠标。
方法签名:ActionChains(driver).release(on_element=None)
参数:on_element,释放鼠标的元素,如果参数为None,在当前位置释放鼠标。

move_by_offset方法

作用:将鼠标从当前位置按偏移量移动鼠标。
方法签名:ActionChains(driver).move_by_offset(xoffset, yoffset)
参数:

  • xoffset:需要移动的X偏移量。正负整数。
  • yoffset:需要移动的Y偏移量。正负整数。

move_to_element_with_offset方法

作用:将鼠标从当前位置移动至某元素中心位置(按偏移量移动,偏移量相对于元素的左上角)。
方法签名:ActionChains(driver).move_to_element_with_offset(to_element, xoffset, yoffset)
参数:

  • to_element:鼠标移动的目标元素
  • xoffset:需要移动的X偏移量
  • yoffset:需要移动的Y偏移量

drag_and_drop方法

作用:拖放元素(按下鼠标左键拖动源元素至目标元素时释放鼠标左键)。
方法签名:ActionChains(driver).drag_and_drop(source, target)
参数:

  • source:鼠标拖动的元素
  • target:鼠标释放的元素

原理:先click_and_hold(source),再release(target)

drag_and_drop_by_offset方法

作用:拖放元素,类似于 drag_and_drop方法,只不过将元素拖放某些偏移量。
方法签名:ActionChains(driver).drag_and_drop_by_offset(source, xoffset, yoffset)
参数:

  • source:鼠标拖动的元素
  • xoffset:需要移动的X偏移量
  • yoffset:需要移动的Y偏移量

原理:先click_and_hold(source),再move_by_offset(xoffset, yoffset),最后release()

ActionChains类键盘操作方法

Selenium不但可以输入实体字符,还可以输入组合键。selenium\webdriver\common\keys.py中的Keys类映射了大多数修饰键。可使用from selenium.webdriver.common.keys import Keys导入Keys类。

key_down方法

作用:按下某个键(不释放),应当只用于修饰键(CTRL、ALT、SHIFT)。
方法签名:ActionChains(driver).key_down(value, element=None)
参数:

  • value:按下的修饰键。
  • element:按键的元素,如果参数为None,在当前位置按键。

key_up方法

作用:释放某个修饰键。
方法签名:ActionChains(driver).key_up(value, element=None)
参数:

  • value:按下的修饰键。
  • element:按键的元素,如果参数为None,在当前位置按键。

案例:按下ctrl+c

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

send_keys方法

作用:向当前元素输入内容。
方法签名:ActionChains(driver).send_keys(*keys_to_send)
参数: keys_to_send:即将发送的内容。

send_keys_to_element方法

作用:向某元素输入内容。
方法签名:ActionChains(driver).send_keys_to_element(element, *keys_to_send)
参数:

  • element:给定元素。
  • keys_to_send:即将发送的内容。

原理:先click(element),再send_keys(*keys_to_send)

pause方法

作用:按秒数暂停所有输入。
方法签名:ActionChains(driver).pause(seconds)
参数:seconds暂停秒数。

猜你喜欢

转载自blog.csdn.net/mighty13/article/details/114842762