当前位置: 首页 > 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.xdnf.cn/news/1298107.html

相关文章:

  • PyCharm 2025.2:面向工程师的 AI 工具
  • IDEA、Pycharm、DataGrip等激活破解冲突问题解决方案之一
  • C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
  • 20道Vue框架相关前端面试题及答案
  • OpenCV ------图像基础处理(一)
  • Elasticsearch ABAC 配置:基于患者数据的动态访问控制
  • Exif.js获取手机拍摄照片的经纬度
  • 风电功率预测实战:从数据清洗到时空建模​​
  • 机器翻译:回译与低资源优化详解
  • C# 高并发处理方式
  • 【每天一个知识点】生物的数字孪生
  • 如何选择适合工业场景的物联网网关?
  • TWINCAT+COPLEY ethercat配置
  • week1-[分支嵌套]公因数
  • Cherryusb UAC例程对接STM32 SAI播放音乐和录音(上)=>SAI+TX+RX+DMA的配置与音频回环测试
  • C++:浅尝gdb
  • 云计算-Docker Compose 实战:从OwnCloud、WordPress、SkyWalking、Redis ,Rabbitmq等服务配置实例轻松搞定
  • Mybatis学习笔记(七)
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 分享10个ai生成ppt网站(附ai生成ppt入口)
  • 智慧工地从工具叠加到全要素重构的核心引擎
  • 跨域及解决方案
  • AI搜索重构下的GEO优化服务商格局观察
  • 一致性哈希Consistent Hashing
  • DAY 42 Grad-CAM与Hook函数
  • JS 解构赋值语法
  • 【OpenCV】Mat详解
  • docker compose部署mysql
  • 面试题之项目中灰度发布是怎么做的
  • 深入了解linux系统—— 线程概念