一.鼠标操作
主要使用selenium中的ActionChains类
AcitonChains基本原理
ActionChains的执行原理是,当调用ActionChain方法的时候不会立即执行,而是使用一个队列,当调用perform()方法的时候,队列中的时间会依次执行
来自源码,可以看到这里有个列表_action 用来临时存储需要执行的队列
from selenium.webdriver.common.action_chains import ActionChains
def __init__(self, driver):
"""
Creates a new ActionChains.
:Args:
- driver: The WebDriver instance which performs user actions.
"""
self._driver = driver
self._actions = []
if self._driver.w3c:
self.w3c_actions = ActionBuilder(driver)
然后返回的都是self,也就是链式调用。
ActionChains 常用方法列表
- click()——单击鼠标左键
- context_click(on_element=None) ——点击鼠标右键
- double_click(on_element=None) ——双击鼠标左键
- drag_and_drop(source, target) ——拖拽到某个元素然后松开
- move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
- move_to_element(to_element) ——鼠标移动到某个元素
- perform() ——执行链中的所有动作
- release(on_element=None) ——在某个元素位置松开鼠标左键
这里问题:为什么双击不可以用
ac.click().click()
因为:click()方法返回的数据都是None,不利于之后的操作与断言
使用展示
这里可以把鼠标的每一步操作都分开写
action = ActionChains(driver)
# 1.鼠标悬停
action.move_to_element()
# 2.点击动作
action.click()
# 3.右击
action.context_click()
# 4.perform结束
action.perform()
也可以放在一起写
ActionChains(driver).move_to_element(testa).click(test