模拟鼠标操作
- 在实际场景中,会有单击、长时间单击、双击、右击、拖放、移动等鼠标操作,或在当前光标位置的按键输入或鼠标操作。
- selenium提供了名为ActionChains的类来处理这些操作,我们一般翻译为“操作链”或“动作链”。
- 导入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
- ActionChains类使用前需要先实例化
变量=ActionChains(driver)
- ActionChains操作链里的操作方法有:※代表常用
ActionChains执行原理
- ActionChains执行原理:按照设计好的动作顺序链式执行
- 当你调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的方法会依次前后执行。
ActionChains基本用法
- 链式写法
ActionChains(driver).方法1(参数).方法2(参数).perform()
# 整套动作
driver.get('http://sahitest.com/demo/clicks.htm')
click_btn = driver.find_element(By.XPATH,'//input[@value="click me"]') # 单击按钮
doubleclick_btn = driver.find_element(By.XPATH,'//input[@value="dbl click me"]') # 双击按钮
rightclick_btn = driver.find_element(By.XPATH,'//input[@value="right click me"]') # 右键单击按钮
ActionChains(driver).click(click_btn).double_click(doubleclick_btn).context_click(rightclick_btn).perform() # 链式写法
print(driver.find_element(By.NAME,'t2').get_attribute('value'))
- 分布写法
# 创建ActionChains对象,构造方法的参数是driver
变量 = ActionChains(driver)
变量.方法1(参数) # 参数是元素对象
变量.方法2(参数)
变量.perform()
# 分解动作
driver.get('http://sahitest.com/demo/mouseover.htm')
write = driver.find_element(By.XPATH,'//input[@value="Write on hover"]') # 鼠标移动到此元素,在下面的input框中会显示“Mouse moved”
blank = driver.find_element(By.XPATH,'//input[@value="Blank on hover"]') # 鼠标移动到此元素,会清空下面input框中的内容
result = driver.find_element(By.NAME,'t1')
action = ActionChains(driver)
action.move_to_element(write).perform() # 移动到write
print(result.get_attribute('value')) # 显示“Mouse moved”
action.move_to_element(blank).perform()
print(result.get_attribute('value'))# 显示空
# 拖拽
driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
dragger = driver.find_element(By.ID,'dragger') # 被拖拽元素
item1 = driver.find_element(By.XPATH,'//div[text()="Item 1"]') # 目标1
action = ActionChains(driver)
action.drag_and_drop(dragger, item1).perform() # 移动dragger到目标1
sleep(3)
# 注意:拖拽时注意加等待时间,可能因为速度太快而失败。
"""
当前焦点输入
点击关键字文本框,连续按下键盘上的Tab键两次,此时当前焦点位于“高级搜索”这个元素,在这个焦点位置按下回车就可以完成它的操作(不需要对高级搜索进行定位)
"""
# 双击
ac1 = ActionChains(driver)
# 获取要操作的元素对象
element1 = driver.find_element(定位方法,参数)
ac1.double_click(element1)
# 注意:actionchains使用时,调用方法只是往动作链追加一个动作,但是并不会默认执行这个动作,要执行动作链里的所有动作,必须最后调用perform()方法
ac1.perform()
# 单击鼠标右键
ac1 = ActionChains(driver)
# 获取要操作的元素对象
element2 = driver.find_element(定位方法,参数)
ac1.context_click(element2)
# 注意:actionchains使用时,调用方法只是往动作链追加一个动作,但是并不会默认执行这个动作,要执行动作链里的所有动作,必须最后调用perform()方法
ac1.perform()
标签:perform,鼠标,--,Selenium14,driver,element,click,ActionChains,find
From: https://www.cnblogs.com/sean-test/p/16977532.html