《软件自动化测试实战系列之ActionChains鼠标模拟操作方法使用大全》
文章目录
前言:用Selenium进行自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单机、双击、右击、拖动等。而Selenium提供一个类来处理这类时间——ActionChains。接下来我来带着大家深入研究。
1、ActionChains的引入
ActionChains基本能够满足所有对鼠标操作的需求。使用此类中的方法,需要先引入此类,引入代码为
from selenium.webdriver import ActionChains
2、ActionChains的执行原理
当调用ActionChains()方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里面,当调用perform()方法时,按照队列里面的顺序进行执行。其中调用的perform()方法必须放在ActionChains方法最后。那么这种情况可以有两种调用方法。
3、ActionChains的调用写法
一、链式写法
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
# 初始化浏览器驱动
driver = webdriver.Chrome()
try:
# 打开网页
driver.get("https://www.example.com")
# 定位元素
element = driver.find_element(By.ID, "example-id")
# 使用链式写法执行操作
actions = ActionChains(driver)
actions.move_to_element(element).click().send_keys("软件测试赋能培训找旺仔Sec!").perform()
except Exception as e:
print(f"An error occurred: {e}")
finally:
# 关闭浏览器
driver.quit()
在上述代码中,move_to_element、click 和 send_keys 这些操作方法依次相连,最后调用 perform() 方法来执行所有操作。
二、分布写法
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
# 初始化浏览器驱动
driver = webdriver.Chrome()
try:
# 打开网页
driver.get("https://www.example.com")
# 定位元素
element = driver.find_element(By.ID, "example-id")
# 使用分布写法执行操作
actions = ActionChains(driver)
actions.move_to_element(element)
actions.click()
actions.send_keys("软件测试赋能培训找旺仔Sec!!")
actions.perform()
except Exception as e:
print(f"An error occurred: {e}")
finally:
# 关闭浏览器
driver.quit()
在分布写法代码中,每个操作方法单独调用,最后同样调用 perform() 方法来执行所有操作。
注意:这两种写法达成的效果一样,不过链式写法更简洁,分布写法则更便于调试和理解。
我给大家整理了ActionChains的方法大全如下
selenium
中ActionChains
类常用方法及其描述的表格:
方法 | 描述 |
---|---|
click(on_element=None) | 单击一个元素,如果未指定元素,则单击当前鼠标位置。 |
click_and_hold(on_element=None) | 在指定元素上按下鼠标左键,不释放。如果未指定元素,则在当前鼠标位置按下。 |
context_click(on_element=None) | 在指定元素上执行右键单击操作。如果未指定元素,则在当前鼠标位置右键单击。 |
double_click(on_element=None) | 在指定元素上执行双击操作。如果未指定元素,则在当前鼠标位置双击。 |
drag_and_drop(source, target) | 将源元素拖动到目标元素上。source 是要拖动的元素,target 是目标元素。 |
drag_and_drop_by_offset(source, xoffset, yoffset) | 将源元素拖动到相对于其当前位置的指定偏移量处。source 是要拖动的元素,xoffset 和 yoffset 分别是水平和垂直偏移量。 |
key_down(value, element=None) | 按下指定的键(如 Control 、Shift 等),不释放。如果指定了元素,则在该元素上执行操作。 |
key_up(value, element=None) | 释放之前按下的键。如果指定了元素,则在该元素上执行操作。 |
move_by_offset(xoffset, yoffset) | 将鼠标从当前位置移动到指定的偏移量处。xoffset 和 yoffset 分别是水平和垂直偏移量。 |
move_to_element(to_element) | 将鼠标移动到指定元素的中心位置。 |
move_to_element_with_offset(to_element, xoffset, yoffset) | 将鼠标移动到指定元素内的指定偏移量处。 |
perform() | 执行存储在 ActionChains 对象中的所有操作。 |
release(on_element=None) | 在指定元素上释放鼠标左键。如果未指定元素,则在当前鼠标位置释放。 |
send_keys(*keys_to_send) | 在当前焦点元素上发送一系列按键。 |
send_keys_to_element(element, *keys_to_send) | 在指定元素上发送一系列按键。 |
4、百度首页项目实战
需求:1、进入百度首页;
2、在输入框中输入“软件测试竞赛培训找旺仔Sec”;
3、双击信息;
4、右击信息;
5、将鼠标指针悬停在百度一下按钮处;
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
# 初始化浏览器驱动
driver = webdriver.Chrome()
try:
# 1. 进入百度首页
driver.get("https://www.baidu.com/")
# 定位输入框和搜索按钮
input_box = driver.find_element(By.ID, "kw")
search_button = driver.find_element(By.ID, "su")
# 2. 在输入框中输入内容
input_box.send_keys("软件测试竞赛培训找旺仔Sec")
# 3. 创建ActionChains对象并执行操作
actions = ActionChains(driver)
# 4. 双击输入框内容(先点击确保焦点)
actions.click(input_box)
actions.double_click(input_box)
# 5. 右击输入框内容
actions.context_click(input_box)
# 6. 悬停在"百度一下"按钮
actions.move_to_element(search_button)
# 执行所有操作
actions.perform()
finally:
# 关闭浏览器
driver.quit()
创作不易,如果对您有帮助的话,点赞关注收藏三连支持一下俺吧!🙂