Selenium WebDriver - 动作API

本文翻译整理自:https://www.selenium.dev/documentation/webdriver/actions_api/


文章目录

    • 一、行动建设者
    • 二、暂停
    • 三、释放所有操作
    • 四、键盘动作
      • 1、钥匙
      • 2、钥匙放下
      • 3、钥匙打开
      • 4、发送钥匙
        • 活性元素
        • 指定元素
      • 5、复制和粘贴
    • 五、鼠标动作
      • 1、点击并按住
      • 2、点击并释放
      • 3、备用按钮点击
        • 上下文点击
        • 后退点击
        • 转发点击
      • 4、双击
      • 5、移动到元素
      • 6、偏移移动
        • 元素偏移量
        • 视口偏移量
        • 与当前指针位置的偏移量
      • 7、元素上的拖放
      • 8、按偏移量拖放
    • 六、钢笔动作
      • 1、使用钢笔
      • 2、添加指针事件属性
    • 七、滚轮动作
      • 1、滚动到元素
      • 2、按给定数量滚动
      • 3、从元素滚动给定的量
      • 4、从具有偏移量的元素滚动
      • 5、从原点(元素)的偏移量滚动给定的量


用于向Web浏览器提供虚拟化设备输入操作的低级界面。

除了高级元素相互作用, 这个动作API提供了对 正是指定的输入设备可以做什么。
Selenium为3种输入源提供接口: 键盘设备的键输入,鼠标、笔或触摸设备的指针输入, 和滚轮设备的滚轮输入(在Selenium 4.2中引入)。
Selenium允许您构建分配给特定 输入并将它们链接在一起并调用相关的执行方法一次执行它们。


一、行动建设者

在从传统的JSON Wire协议到新的W3C WebDriver协议的过程中,操作的低级构建块变得特别详细。
它非常强大,但是每个输入设备都有多种使用方式,如果您需要管理多个设备,您有责任确保它们之间的正确同步。

值得庆幸的是,您可能不需要学习如何直接使用低级命令,因为 几乎所有你可能想做的事情都有一个方便的方法,它结合了 较低级别的命令。
这些都记录在 键盘、鼠标、笔和滚轮页面。


二、暂停

指针移动和滚轮滚动允许用户设置动作的持续时间,但有时您只需要在动作之间等待一拍即可正常工作。

clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\.move_to_element(clickable)\.pause(1)\.click_and_hold()\.pause(1)\.send_keys("abc")\.perform()

在GitHub上查看完整示例


三、释放所有操作

需要注意的重要一点是,驱动程序会在整个会话中记住所有输入项的状态。
即使您创建了一个操作类的新实例,按下的键和指针的位置将处于先前执行的操作留给它们的任何状态。

有一种特殊的方法可以释放所有当前按下的键和指针按钮。
此方法在每种语言中的实现方式都不同,因为它不会使用执行方法执行。

ActionBuilder(driver).clear_actions()

在GitHub上查看完整示例


四、键盘动作

用于与网页交互的任何键输入设备的表示。

使用键盘只能完成2个动作:按下一个键和释放一个按下的键。
除了支持ASCII字符之外,每个键盘键都有一个表示,可以按指定的顺序按下或释放。


1、钥匙

除了常规unicode表示的键之外, Unicode值已分配给其他键盘键以与Selenium一起使用。
每种语言都有自己引用这些键的方式;可以找到完整的列表 这里。

使用Python密钥类


2、钥匙放下

ActionChains(driver)\.key_down(Keys.SHIFT)\.send_keys("abc")\.perform()

在GitHub上查看完整示例


3、钥匙打开

ActionChains(driver)\.key_down(Keys.SHIFT)\.send_keys("a")\.key_up(Keys.SHIFT)\.send_keys("b")\.perform()

在GitHub上查看完整示例


4、发送钥匙

这是Actions API中的一种方便方法,它将keyDown和keyUp命令组合在一个操作中。
执行此命令与使用元素方法略有不同,但主要用于需要在其他操作中间键入多个字符时。


活性元素
ActionChains(driver)\.send_keys("abc")\.perform()

在GitHub上查看完整示例


指定元素
text_input = driver.find_element(By.ID, "textInput")
ActionChains(driver)\.send_keys_to_element(text_input, "abc")\.perform()

在GitHub上查看完整示例


5、复制和粘贴

下面是使用上述所有方法进行复制/粘贴操作的示例。
请注意,用于此操作的键将根据它是否是Mac OS而有所不同。
这段代码将以文本结束:SeleniumSelenium!

cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROLActionChains(driver)\.send_keys("Selenium!")\.send_keys(Keys.ARROW_LEFT)\.key_down(Keys.SHIFT)\.send_keys(Keys.ARROW_UP)\.key_up(Keys.SHIFT)\.key_down(cmd_ctrl)\.send_keys("xvv")\.key_up(cmd_ctrl)\.perform()

在GitHub上查看完整示例


五、鼠标动作

用于与网页交互的任何指针设备的表示。

只有3个动作可以用鼠标完成:按下按钮、释放按下的按钮和移动鼠标。
Selenium提供了以最常见的方式组合这些动作的便捷方法。


1、点击并按住

此方法将鼠标移动到元素的中心与按下鼠标左键相结合。
这对于聚焦特定元素很有用:

clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\.click_and_hold(clickable)\.perform()

在GitHub上查看完整示例


2、点击并释放

此方法将移动到元素中心与按下和释放鼠标左键相结合。
这也称为“单击”:

clickable = driver.find_element(By.ID, "click")
ActionChains(driver)\.click(clickable)\.perform()

在GitHub上查看完整示例


3、备用按钮点击

鼠标总共有5个定义的按钮:

  • 0-左按钮(默认)
  • 1-中间按钮(当前不支持)
  • 2-右按钮
  • 3-X1(返回)按钮
  • 4-X2(前进)按钮

上下文点击

此方法将移动到元素中心与按下和释放鼠标右键(按钮2)相结合。
这也称为“右键单击”:

clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\.context_click(clickable)\.perform()

在GitHub上查看完整示例


后退点击

这没有方便的方法,只是按下和释放鼠标按钮3

Selenium v4.2

action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()

在GitHub上查看完整示例


转发点击

这没有方便的方法,只是按下和释放鼠标按钮4

Selenium v4.2

action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()

在GitHub上查看完整示例


4、双击

此方法将移动到元素中心与按下和释放鼠标左键两次相结合。

clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\.double_click(clickable)\.perform()

在GitHub上查看完整示例


5、移动到元素

此方法将鼠标移动到元素的视图中心点。
这也称为“悬停”。
请注意,元素必须在视口中,否则命令将出错。

hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver)\.move_to_element(hoverable)\.perform()

在GitHub上查看完整示例


6、偏移移动

这些方法首先将鼠标移动到指定的原点,然后通过提供的偏移量中的像素数。
请注意,鼠标的位置必须在视口中,否则命令将出错。


元素偏移量

此方法将鼠标移动到元素的视图中心点,然后移动提供的偏移量。

mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver)\.move_to_element_with_offset(mouse_tracker, 8, 0)\.perform()

在GitHub上查看完整示例


视口偏移量

此方法将鼠标从当前视口的左上角移动提供的偏移量。

action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()

在GitHub上查看完整示例


与当前指针位置的偏移量

此方法通过用户提供的偏移量将鼠标从当前位置移动。
如果鼠标之前没有移动过,则该位置将在视口的左上角。
请注意,滚动页面时指针位置不会改变。

请注意,第一个参数X指定在为正时向右移动,而第二个参数 Y指定当为正时向下移动。
所以moveByOffset(30, -10)向右移动30,向上移动10 当前鼠标位置。

ActionChains(driver)\.move_by_offset( 13, 15)\.perform()

在GitHub上查看完整示例


7、元素上的拖放

此方法首先对源元素执行单击并按住,移动到目标元素的位置,然后释放鼠标。

draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver)\.drag_and_drop(draggable, droppable)\.perform()

在GitHub上查看完整示例


8、按偏移量拖放

此方法首先对源元素执行单击并按住,移动到给定的偏移量,然后释放鼠标。

draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver)\.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y'])\.perform()

在GitHub上查看完整示例


六、钢笔动作

用于与网页交互的笔指示笔类型的指针输入的表示。

仅Chromium

Pen是一种指针输入,其行为与鼠标基本相同,但也可以具有触控笔独有的事件属性。
此外,虽然鼠标有5个按钮,但笔有3个等效的按钮状态:

  • 0-触摸联系人(默认;相当于左键单击)
  • 2-桶按钮(相当于右键单击)
  • 5-橡皮擦按钮(当前驱动程序不支持)

1、使用钢笔

Selenium v4.2

pointer_area = driver.find_element(By.ID, "pointerArea")
pen_input = PointerInput(POINTER_PEN, "default pen")
action = ActionBuilder(driver, mouse=pen_input)
action.pointer_action\.move_to(pointer_area)\.pointer_down()\.move_by(2, 2)\.pointer_up()
action.perform()

在GitHub上查看完整示例


2、添加指针事件属性

Selenium v4.2

pointer_area = driver.find_element(By.ID, "pointerArea")
pen_input = PointerInput(POINTER_PEN, "default pen")
action = ActionBuilder(driver, mouse=pen_input)
action.pointer_action\.move_to(pointer_area)\.pointer_down()\.move_by(2, 2, tilt_x=-72, tilt_y=9, twist=86)\.pointer_up(0)
action.perform()

在GitHub上查看完整示例


七、滚轮动作

用于与网页交互的滚轮输入设备的表示。

Selenium v4.2

仅Chromium

在页面上滚动有5种场景。


1、滚动到元素

这是最常见的场景。
与传统的单击和发送键方法不同,action类不会自动将目标元素滚动到视图中,因此如果元素尚未在视口中,则需要使用此方法。

此方法将Web元素作为唯一参数。

无论元素是在当前视屏上方还是下方,视口都将滚动,因此元素的底部位于屏幕底部。

iframe = driver.find_element(By.TAG_NAME, "iframe")
ActionChains(driver)\.scroll_to_element(iframe)\.perform()

在GitHub上查看完整示例


2、按给定数量滚动

这是滚动的第二个最常见的场景。
传入增量x和增量y值,表示在右方向和向下方向滚动多少。
负值分别代表左和上。

footer = driver.find_element(By.TAG_NAME, "footer")
delta_y = footer.rect['y']
ActionChains(driver)\.scroll_by_amount(0, delta_y)\.perform()

在GitHub上查看完整示例


3、从元素滚动给定的量

这种情况实际上是上述两种方法的组合。

要执行此操作,请使用“Scroll From”方法,该方法接受3个参数。
第一个表示起始点,我们将其指定为元素,后两个是delta x和delta y值。

如果元素在视口之外,它将滚动到屏幕底部,然后页面将通过提供的增量x和增量y值滚动。

iframe = driver.find_element(By.TAG_NAME, "iframe")
scroll_origin = ScrollOrigin.from_element(iframe)
ActionChains(driver)\.scroll_from_origin(scroll_origin, 0, 200)\.perform()

在GitHub上查看完整示例


4、从具有偏移量的元素滚动

当您只需要滚动屏幕的一部分并且它在视口之外时,使用此方案。
或者在视口内,必须滚动的屏幕部分是远离特定元素的已知偏移量。

这再次使用了“Scroll From”方法,除了指定元素外,还指定了一个偏移量来指示滚动的原点。
偏移量是从提供的元素的中心计算的。

如果元素在视口之外,它首先会滚动到屏幕底部,然后通过将偏移量添加到元素中心的坐标来确定滚动的原点,最后页面将通过提供的增量x和增量y值进行滚动。

请注意,如果元素中心的偏移量落在视口之外,则会导致异常。

footer = driver.find_element(By.TAG_NAME, "footer")
scroll_origin = ScrollOrigin.from_element(footer, 0, -50)
ActionChains(driver)\.scroll_from_origin(scroll_origin, 0, 200)\.perform()

在GitHub上查看完整示例


5、从原点(元素)的偏移量滚动给定的量

当您只需要滚动屏幕的一部分并且它已经在视口内时,将使用最后一个场景。

这再次使用“Scroll From”方法,但指定了视口而不是元素。
从当前视口的左上角指定偏移量。
确定原点后,页面将按提供的增量x和增量y值滚动。

请注意,如果视口左上角的偏移量落在屏幕之外,则会导致异常。

scroll_origin = ScrollOrigin.from_viewport(10, 10)ActionChains(driver)\.scroll_from_origin(scroll_origin, 0, 200)\.perform()

在GitHub上查看完整示例


2024-06-17(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件串口接收子程序

代码; stduart.c /*《AVR专题精选》随书例程3.通信接口使用技巧项目:使用延时法实现半双工软件串口文件:sfuart.c说明:软件串口驱动文件作者:邵子扬时间:2012年12月13日*/ #include "sfduart.h"// 循环中延…

WinMerge v2 (开源的文件比较/合并工具)

前言 WinMerge 是一款运行于Windows系统下的免费开源的文件比较/合并工具,使用它可以非常方便地比较多个文档内容甚至是文件夹与文件夹之间的文件差异。适合程序员或者经常需要撰写文稿的朋友使用。 一、下载地址 下载链接:http://dygod/source 点击搜…

【Linux】进程间通信3——线程安全

1.Linux线程互斥 1.1.进程线程间的互斥相关背景概念 临界资源: 多线程执行流共享的资源叫做临界资源。临界区: 每个线程内部,访问临界资源的代码,就叫做临界区。互斥: 任何时刻,互斥保证有且只有一个执行…

动态创建接口地址

和SpringBoot版本有关系 这里用的boot 2.2.2

docker使用记录

目的:在ubuntu22.04中使用docker拉取ubuntu20.04镜像,后续安装ros1以及相机和激光驱动 1.pull 镜像/etc/docker文件中修改daemon.json{"runtimes": {"nvidia": {"path": "nvidia-container-runtime","run…

LabVIEW电控旋翼测控系统

开发基于LabVIEW开发的电控旋翼测控系统,通过高效监控和控制提升旋翼系统的性能和安全性。系统集成了多种硬件设备,采用模块化设计,实现复杂的控制和数据处理功能,适用于现代航空航天领域。 项目背景 传统旋翼系统依赖机械和液压…

IO模型详解

阻塞IO模型 假设应用程序的进程发起IO调用,但是如果内核的数据还没准备好的话,那应用程序进程就一直在阻塞等待,一直等到内核数据准备好了,从内核拷贝到用户空间,才返回成功提示,此次IO操作,称…

C# 中的静态关键字

C# 语言中的 static 关键字用于声明静态类和静态类成员。静态类和静态类成员(如构造函数、字段、属性、方法和事件)在只需要一个对象(类或类成员)副本并在类型(和成员)的所有实例(对象&#xff…

React+TS前台项目实战(十五)-- 全局常用组件Table封装

文章目录 前言Table组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 在这篇文章中,我们将对本系列项目中常用的表格组件Table进行自定义封装,以提高性能并适应项目需求。后期也可进行修改和扩展,以满足项目的需求。 Table组…

C# Onnx Yolov5 水果识别,人员识别,物品识别 人工智能

目录 先上效果 来电废话,但实用 网络成功案例实践易失败的原因 万物检测涉及技术 下载合集 关键代码 全部代码 实操vs2022安装关键 YOLO V5核心库编译 编写自己识别软件 更新相关依赖 标注字库文件 测试效果 名词解释YOLO 名词解释ONNX 源码 直播教…

卸载 ubuntu-wsl2-systemd-script,使用 WSLg 图形用户界面

目录 全新安装 - 以前没有安装 WSL现有 WSL 安装卸载 ubuntu-wsl2-systemd-script使用 Linux GUI参考链接在 Windows 上使用 Linux 开发环境,最好的做法是使用 WSL2。在 WSL 和早期的 WSL2 版本中,并不支持图形用户界面。因此如果想要使用 GUI 程序,需要自行解决。具体方法可…

XSL-FO 对象

XSL-FO 对象 1. 概述 XSL-FO(Extensible Stylesheet Language Formatting Objects)是一种基于XML的语言,用于描述格式化结构化文档的样式和布局。XSL-FO提供了一种将XML数据转换为格式化输出(如PDF、PostScript或HTML)的方法。XSL-FO对象是XSL-FO文档中的基本构建块,用…

主流的Agent框架

Rank1、AutoGPT(161k stars)>https://github.com/Significant-Gravitas/AutoGPT Rank2、LangChain(82.7k stars)>https://github.com/langchain-ai/langchain Rank3、MetaGPT(39.1k stars)>https://github.com/geekan/MetaGPT Rank4、AutoGen(24.8k stars)>http…

读线圈和离散状态寄存器信息

一.功能码操作类型 二.读线圈状态 需求实例 读取设备地址为 3 的从设备的线圈状态寄存器,线圈地址为 19 到 55(从 0 开始计算)共 37 个状态。 分析:由需求可知读取地址,则功能码是0x01,地址为3即为0x03,线圈地址为19到…

Python | Leetcode Python题解之第179题最大数

题目&#xff1a; 题解&#xff1a; class Solution:def largestNumber(self, nums: List[int]) -> str:def quick_sort(l , r):if l > r: returni, j l, rwhile i < j:while strs[j] strs[l] > strs[l] strs[j] and i < j: j - 1while strs[i] strs[l] &l…

基于matlab的BP神经网络分类预测

1.神经网络结构 本文网络结构如图1所示&#xff1a; 图1 网络结构 图1给出的并不是单纯的bp神经网络结构这里设置了三个隐藏层&#xff0c;神经元个数分别为6&#xff0c;3&#xff0c;3&#xff0c;输入层12个特征输入&#xff0c;输出层输出4个类型结果。 2.代码 %% 清空环…

提升数据库性能的关键方法总结

提升数据库性能的关键方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着数据库在现代应用中的广泛应用&#xff0c;数据库性能的优化成为了开发人员…

使用ViewDragHelper打造属于自己的DragLayout(抽屉开关 )

</com.xujun.drawerLayout.drag.DragLayout> 在代码中若想为其设置监听器, 分别可以监听打开的 时候&#xff0c;关闭的时候&#xff0c;拖动的时候&#xff0c;可以在里面做相应的处理&#xff0c;同时我还加入了 自定义属性可以通过 app:range”480”或者setRange&am…

如何用Python写一个自然语言ai模型

创建一个自然语言处理&#xff08;NLP&#xff09;模型是一个复杂的过程&#xff0c;涉及到数据收集、预处理、模型选择、训练和评估等多个步骤。 下面是一个简化的Python示例&#xff0c;展示了如何使用现有的库来构建一个基础的自然语言AI模型。这个例子将使用transformers库…

uniapp wgt多环境打包与调试插件——uni-packing-wgt

文章目录 背景介绍安装与使用 背景介绍 由于官方的HBuilderX编译器打包wgt每次都要手动的操作有些繁琐&#xff0c;也不支持多环境打包&#xff0c;在开发阶段与原生项目交互调试是极其不方便。而uni-packing-wgt正好可以解决这些问题。 uni-packing-wgt是uniapp跨平台多环境…