当前位置: 首页 > news >正文

ActionChains 鼠标操作笔记

1. 引入依赖

import pytest from selenium
import webdriver from selenium.webdriver.common.by
import By from selenium.webdriver.common.action_chains import ActionChains

2. 前置准备(pytest fixture)

@pytest.fixture(scope="module") def driver(): # 创建浏览器实例
driver = webdriver.Chrome() driver.maximize_window()
driver.get("https://www.baidu.com") # 示例页面 
driver driver.quit()

3. 单击 click

def test_single_click(driver): 
element = driver.find_element(By.ID, "kw") # 百度搜索框
ActionChains(driver).click(element).perform()

注意click() 如果不传 element,则点击当前鼠标所在位置。


4. 悬停 hover

def test_hover(driver): 
element = driver.find_element(By.XPATH, '//a[text()="更多"]')
ActionChains(driver).move_to_element(element).perform()

常用于测试下拉菜单、tooltip 提示框。


5. 双击 double_click

def test_double_click(driver):
element = driver.find_element(By.ID, "kw")
ActionChains(driver).double_click(element).perform()

双击一般用于触发选中或打开操作。


6. 右击 context_click

def test_right_click(driver):
element = driver.find_element(By.ID, "kw")
ActionChains(driver).context_click(element).perform()

右键操作可以测试自定义右键菜单。


7. 元素拖拽 drag_and_drop

def test_drag_and_drop(driver):
driver.get("https://jqueryui.com/droppable/") # 示例拖拽页面
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR, ".demo-frame"))
source = driver.find_element(By.ID, "draggable") # 拖动源
target = driver.find_element(By.ID, "droppable") # 拖动目标
ActionChains(driver).drag_and_drop(source, target).perform()

8. 拖拽到指定位置 drag_and_drop_by_offset

def test_drag_and_drop_by_offset(driver):
driver.get("https://jqueryui.com/draggable/")
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR, ".demo-frame"))
source = driver.find_element(By.ID, "draggable") # 向右 100 像素,下 50 像素
ActionChains(driver).drag_and_drop_by_offset(source, 100, 50).perform()

9. 常用注意事项

  1. .perform() 必须调用

    • 所有链式操作在 .perform() 之前不会执行。

  2. 如果页面有 iframe,先 driver.switch_to.frame() 再操作元素。

  3. 如果目标元素被遮挡,需要先滚动到可见位置(element.location_once_scrolled_into_view)。

  4. 鼠标操作可能受浏览器缩放、分辨率影响,建议统一测试环境。

  5. 有延迟的交互,配合 .pause(秒数) 使用更稳。

http://www.lryc.cn/news/621009.html

相关文章:

  • 恐鬼症 单机+联机(Phasmophobia)免安装中文版
  • SQL181 第二快/慢用时之差大于试卷时长一半的试卷
  • 【昇腾】VirtualBox虚拟机下搭建Ubuntu 22.04环境给TF卡制卡报读写IO错误的问题处理_20250814
  • 自动化测试|持续集成Git使用详解
  • elasticsearch冷热数据读写分离!
  • 快速搭建python HTTP Server测试环境
  • gitlab的ci/cd变量如何批量添加
  • STL算法【常用的算数生成算法】
  • 分享10个ai生成ppt网站(附ai生成ppt入口)
  • 力扣top100(day03-02)--图论
  • 回流(Reflow)与重绘(Repaint):浏览器渲染性能优化核心
  • SpringMVC请求与响应
  • 【Linux】库制作与原理
  • PyTorch回忆(三)U-net
  • java 学习 贪心 + 若依 + 一些任务工作
  • FTP服务器搭建(Linux)
  • opencv:傅里叶变换有什么用?怎么写傅里叶变换?
  • 软件著作权产生与登记关键点
  • 从单机到分布式:用飞算JavaAI构建可扩展的TCP多人聊天系统
  • 算法基础 第3章 数据结构
  • 数学建模-非线性规划模型
  • 深入理解提示词工程:从入门到精通的AI对话艺术
  • Mybatis实现页面增删改查
  • 数仓分层架构设计全解析:从理论到实践的深度思考
  • 一台联想 ThinkCentre M7100z一体机开机黑屏无显示维修记录
  • 【跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命】
  • 解决“Win7共享文件夹其他电脑网络无法发现共享电脑名称”的问题
  • 机器视觉之图像处理篇
  • c/c++ UNIX 域Socket和共享内存实现本机通信
  • 从概率填充到置信度校准:GPT-5如何从底层重构AI的“诚实”机制