《软件自动化测试实战系列之ActionChains鼠标模拟操作方法使用大全》

《软件自动化测试实战系列之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的方法大全如下
seleniumActionChains类常用方法及其描述的表格:

方法描述
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 是要拖动的元素,xoffsetyoffset 分别是水平和垂直偏移量。
key_down(value, element=None)按下指定的键(如 ControlShift 等),不释放。如果指定了元素,则在该元素上执行操作。
key_up(value, element=None)释放之前按下的键。如果指定了元素,则在该元素上执行操作。
move_by_offset(xoffset, yoffset)将鼠标从当前位置移动到指定的偏移量处。xoffsetyoffset 分别是水平和垂直偏移量。
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()

创作不易,如果对您有帮助的话,点赞关注收藏三连支持一下俺吧!🙂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺仔Sec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值