当前位置: 首页 > 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.dtcms.com/a/332078.html

相关文章:

  • # Vue 列表渲染详解
  • AI智能体|扣子(Coze)搭建【批量识别发票并录入飞书】Agent
  • FTP 服务详解:原理、配置与实践
  • 8月14日星期四今日早报简报微语报早读
  • [激光原理与应用-273]:理论 - 波动光学 - 光是电磁波,本身并没有颜色,可见光的颜色不过是人的主观感受
  • 时钟 中断 day54
  • close函数概念和使用案例
  • rustdesk 开源遥控软件
  • 云服务器运行持续强化学习COOM框架的问题
  • 低配硬件运行智谱GLM-4.5V视觉语言模型推理服务的方法
  • C#WPF实战出真汁01--项目介绍
  • linux设备驱动之USB驱动-USB主机、设备与Gadget驱动
  • 【Java|第十九篇】面向对象九——String类和枚举类
  • AI更换商品背景,智能融合,无痕修图
  • Java中加载语义模型
  • Windows bypassUAC 提权技法详解(一)
  • 洗浴中心泡池水过滤系统原理深度解析与工程实践
  • RocketMQ 4.9.3源码解读-客户端Consumer消费者组件启动流程分析
  • 具身智能Scaling Law缺失:机器人界的“摩尔定律“何时诞生?
  • Ansible企业级实战
  • centos部署chrome和chromedriver
  • C#WPF实战出真汁03--登录界面设计
  • C#WPF实战出真汁04--登录功能实现
  • 单目操作符与逗号表达式
  • CoreShop商城框架开启多租户(2)
  • 莫队 + 离散化 Ann and Books
  • 【19-模型训练细节 】
  • 业务敏捷性对SAP驱动型企业意味着什么?如何保持企业敏捷性?
  • 零信任架构(Zero Trust Architecture, ZTA)(通过动态验证和最小权限控制,实现对所有访问请求的严格授权和持续监控)
  • latex 中破折号的输入