最强自动化测试框架Playwright(36)- 句柄
剧作家可以为页面 DOM 元素或页面内的任何其他对象创建句柄。这些句柄存在于 Playwright 进程中,而实际对象位于浏览器中。有两种类型的句柄:
- JSHandle 引用页面中的任何 JavaScript 对象
- ElementHandle 引用页面中的 DOM 元素,它具有额外的方法,允许对元素执行操作并断言其属性。
由于页面中的任何 DOM 元素也是 JavaScript 对象,因此任何 ElementHandle 也是 JSHandle。
句柄用于对页面中的这些实际对象执行操作。可以在句柄上求值、获取句柄属性、将句柄作为求值参数传递、将页面对象序列化为 JSON 等。有关这些和方法,请参阅 JSHandle 类 API。
元素句柄
不鼓励使用 ElementHandle,请改用定位器对象和 Web 优先断言。
当需要 ElementHandle 时,建议使用 page.wait_for_selector() 或 frame.wait_for_selector() 方法获取它。这些 API 等待元素附加并可见。
# Get the element handle
element_handle = page.wait_for_selector('#box')# Assert bounding box for the element
bounding_box = element_handle.bounding_box()
assert bounding_box.width == 100# Assert attribute for the element
class_names = element_handle.get_attribute('class')
assert 'highlighted' in class_names
句柄作为参数
句柄可以传递到 page.evaluate() 和类似的方法中。以下代码片段在页面中创建一个新数组,使用数据对其进行初始化,并将此数组的句柄返回到 Playwright。然后,它在后续评估中使用该句柄:
# Create new array in page.
my_array_handle = page.evaluate_handle("""() => {window.myArray = [1];return myArray;
}""")# Get current length of the array.
length = page.evaluate("a => a.length", my_array_handle)# Add one more element to the array using the handle
page.evaluate("(arg) => arg.myArray.push(arg.newElement)", {'myArray': my_array_handle,'newElement': 2
})# Release the object when it's no longer needed.
my_array_handle.dispose()
处理生命周期
可以使用页面方法(如 page.evaluate_handle()、page.query_selector() 或 page.query_selector_all() 或其框架对应项 frame.evaluate_handle()、frame.query_selector() 或 frame.query_selector_all() )获取句柄。创建后,句柄将保留垃圾回收中的对象,除非页面导航或通过 js_handle.dispose() 方法手动处置句柄。
定位器 vs 元素手柄
我们只建议在极少数情况下使用 ElementHandle,当你需要在静态页面上执行大量的 DOM 遍历时。对于所有用户操作和断言,请改用定位器。
定位器和 ElementHandle 之间的区别在于后者指向特定元素,而定位器捕获如何检索该元素的逻辑。
在下面的示例中,句柄指向页面上的特定 DOM 元素。如果该元素更改文本或被 React 用于渲染完全不同的组件,句柄仍然指向那个非常陈旧的 DOM 元素。这可能会导致意外行为。
handle = page.query_selector("text=Submit")
handle.hover()
handle.click()
使用定位器时,每次使用定位器时,最新的 DOM 元素都会使用选择器位于页面中。因此,在下面的代码片段中,底层 DOM 元素将被定位两次。
locator = page.get_by_text("Submit")
locator.hover()
locator.click()
相关文章:
最强自动化测试框架Playwright(36)- 句柄
剧作家可以为页面 DOM 元素或页面内的任何其他对象创建句柄。这些句柄存在于 Playwright 进程中,而实际对象位于浏览器中。有两种类型的句柄: JSHandle 引用页面中的任何 JavaScript 对象ElementHandle 引用页面中的 DOM 元素,它具有额外的方…...
推荐一个绘图平台(可替代Visio)
不废话,简易记网址: draw.io 网站会重定向到:https://app.diagrams.net/...
【探索Linux】—— 强大的命令行工具 P.6(调试器-gdb、项目自动化构建工具-make/Makefile)
阅读导航 前言一、什么是调试器二、详解 GDB - 调试器1.使用前提2.经常使用的命令3.使用小技巧 三、项目自动化构建工具 - make/Makefile1. make命令⭕语法⭕常用选项⭕常用操作⭕make命令的工作原理⭕make命令的优势: 2.Makefile文件⭕Makefile的基本结构⭕Makefil…...
echarts-convert.js使用
echarts-convert.js demo 点击下载 1、本地安装phantom.js插件 window版本下载 2、更改文件路径 (D:\phantomjs-2.1.1-windows\bin)改为本地项目文件路径 3、打开cmd命令行,并格式化语言 运行以下命令 将命令行语言改为中文简体 chcp…...
数据结构之队列详解(包含例题)
一、队列的概念 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操…...
Prometheus的搭建与使用
一、安装Prometheus 官网下载地址:Download | Prometheus 解压:tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名: mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录: cd /home/prometheus查看配置文件&am…...
实战指南,SpringBoot + Mybatis 如何对接多数据源
系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难,MyBatis动态Sql标签解析 从零开始,手把手教你搭建Spring Boot后台工程并说明 Spring框架与SpringBoot的关联与区别 Spring监听器…...
论文阅读——Imperceptible Adversarial Attack via Invertible Neural Networks
Imperceptible Adversarial Attack via Invertible Neural Networks 作者:Zihan Chen, Ziyue Wang, Junjie Huang*, Wentao Zhao, Xiao Liu, Dejian Guan 解决的问题:虽然视觉不可感知性是对抗性示例的理想特性,但传统的对抗性攻击仍然会产…...
List和ObservableCollection和ListBinding在MVVM模式下的对比
List和ObservableCollection和ListBinding在MVVM模式下的对比 List 当对List进行增删操作后,并不会对View进行通知。 //Employee public class Employee : INotifyPropertyChanged {public event PropertyChangedEventHandler? PropertyChanged;public string N…...
insightface安装过程中提示 Microsoft Visual C++ 14.0 or greater is required.
pip install insightface安装过程中提示 Microsoft Visual C 14.0 or greater is required.Get it with "Microsoft C Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 根据提示网站访问官网下载生成工具 打开软件后会自动更新环境&#…...
mongodb数据库
目录 一、数据库 二、文档 三、集合 四、元数据 五、MongoDB 数据类型 1、ObjectId 2、字符串 3、时间戳 4、日期 一、数据库 一个 mongodb 中可以建立多个数据库。 MongoDB 的默认数据库为"db",该数据库存储在 data 目录中。 MongoDB 的单…...
OpenCV-Python中的图像处理-图像特征
OpenCV-Python中的图像处理-图像特征 图像特征Harris角点检测亚像素级精度的角点检测Shi-Tomasi角点检测SIFT(Scale-Invariant Feature Transfrom)SURF(Speeded-Up Robust Features)FAST算法BRIEF(Binary Robust Independent Elementary Features)算法ORB (Oriented FAST and R…...
Ajax入门+aixos+HTTP协议
一.Ajax入门 概念:AJAX是浏览器与服务器进行数据通信的技术 axios使用: 引入axios.js使用axios函数:传入配置对象,再用.then回调函数接受结果,并做后续处理 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>01.axios使用…...
conda创建虚拟环境
创建虚拟环境是在计算机上设置一个独立的空间,用于安装和运行特定版本的软件和依赖项,以避免与系统其他部分的冲突。 创建虚拟环境: conda create --name myenv python3.8 这将创建一个名为myenv的虚拟环境,并安装Python 3.8版本。…...
Golang服务的请求调度
文章目录 1. 写在前面2. SheddingHandler的实现原理3. 相关方案的对比4. 小结 1. 写在前面 最近在看相关的Go服务的请求调度的时候,发现在gin中默认提供的中间件中,不含有请求调度相关的逻辑中间件,去github查看了一些服务框架,发…...
Jenkins的流水线启动jar后未执行问题处理
现象 在流水线里配置了启动脚本例如,nohup java -jar xxx.jar >nohup.out 2>&1 & 但是在服务器发现服务并未启动,且nohup日志里没输出日志,这样的原因是jenkins在执行完脚本后,就退出了这个进程。 在启动脚本执行jar命令的上一步加入以下…...
智慧工地平台工地人员管理系统 可视化大数据智能云平台源码
智慧工地概述: 智慧工地管理平台是以物联网、移动互联网技术为基础,充分应用大数据、人工智能、移动通讯、云计算等信息技术,利用前端信息采通过人机交互、感知、决策、执行和反馈等,实现对工程项目內人员、车辆、安全、设备、材…...
外包干了2个月测试,技术退步明显...
先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
神经网络基础-神经网络补充概念-19-向量化实现的解释
概念 向量化是一种优化技术,通过使用数组操作代替显式的循环,可以大大提高代码的性能和效率。在机器学习和数据分析领域,向量化是一种常见的实践,它允许你在处理大量数据时更快地进行计算。 一般操作 数组操作:向量…...
四层和七层负载均衡的区别
一、四层负载均衡 四层就是ISO参考模型中的第四层。四层负载均衡器也称为四层交换机,它主要时通过分析IP层和TCP/UDP层的流量实现的基于“IP端口”的负载均衡。常见的基于四层的负载均衡器有LVS、F5等。 以常见的TCP应用为例,负载均衡器在接收到第一个来…...
2026指纹浏览器风控对抗技术实践:从特征伪装到行为合规的全流程落地
一、引言:多账号运营场景下的风控挑战与技术诉求随着 2026 年全球互联网平台风控技术的持续迭代,AI 驱动的多维度交叉验证已成为主流风控模式,平台不仅对设备硬件指纹、网络环境进行深度检测,更将操作行为、业务数据、行为轨迹纳入…...
SDXL-Turbo多场景落地教程:覆盖电商、游戏、教育、自媒体的6大用法
SDXL-Turbo多场景落地教程:覆盖电商、游戏、教育、自媒体的6大用法 1. 认识SDXL-Turbo:重新定义AI绘画体验 SDXL-Turbo不是传统的AI绘画工具,而是一个革命性的实时创作伙伴。想象一下,你打字的同时,画面就在眼前实时…...
SpringBoot项目如何动态加载用户上传的Jar包?两种热部署方案对比
SpringBoot动态加载用户Jar包实战:两种热部署方案深度解析 在当今快速迭代的软件开发环境中,插件化架构正成为提升系统扩展性的关键策略。作为Java生态中最流行的框架之一,SpringBoot项目常面临需要动态加载用户自定义Jar包的需求场景。本文将…...
Ultimate Vocal Remover GUI:免费AI音频分离神器完整使用指南
Ultimate Vocal Remover GUI:免费AI音频分离神器完整使用指南 【免费下载链接】ultimatevocalremovergui 使用深度神经网络的声音消除器的图形用户界面。 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui 想要从歌曲中提取纯净人…...
三相LCL型并网逆变器:电容电流反馈与全前馈电网电压控制策略研究,谐波THD优化至5%以下的相...
三相lcl型并网逆变器控制策略 电容电流反馈和电网电压全前馈,加入5.7.11.13次谐波thd<5。 相关方面电力电气工程,电子信息工程等等都可以。最近在调试三相LCL并网逆变器时发现个有意思的现象:当电网背景谐波严重时,常规…...
高效转换:Markdown与思维导图的无缝衔接指南
1. 为什么需要Markdown与思维导图的相互转换? 第一次接触Markdown和思维导图时,我就被它们的简洁高效所吸引。Markdown用简单的语法就能写出结构清晰的文档,而思维导图则能直观展示复杂的逻辑关系。但真正让我头疼的是,这两种工具…...
使用Proteus进行电路仿真:为HunyuanVideo-Foley生成电子音效提供灵感
使用Proteus进行电路仿真:为HunyuanVideo-Foley生成电子音效提供灵感 1. 引言:当电路仿真遇上AI音效生成 想象一下,你正在为一款科幻游戏设计音效。传统的音效库已经用腻了,想要一些真正独特、带有"电路感"的声音效果…...
别再拍脑袋定A/B测试样本量了!用Python/Excel/R三分钟算出靠谱结果
别再拍脑袋定A/B测试样本量了!用Python/Excel/R三分钟算出靠谱结果 每次启动A/B测试前,团队总会陷入同样的争论:"这次实验需要多少流量才够?"产品经理凭经验说"10万用户应该够了",运营同学翻出上次…...
实战演练:基于ClaudeCode与快马平台构建博客评论交互组件
最近在开发个人博客网站时,遇到了一个常见需求:需要为每篇文章添加评论功能。这个看似简单的模块,实际上涉及不少细节处理。经过一番摸索,我发现在InsCode(快马)平台上结合ClaudeCode的智能生成能力,可以高效完成这个任…...
极速获取全平台歌词:163MusicLyrics跨平台解析工具使用指南
极速获取全平台歌词:163MusicLyrics跨平台解析工具使用指南 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 你是否经常遇到想听的歌曲找不到匹配歌词的情况&a…...
