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

Playwright(Java版) - 8: Playwright 元素交互的高级应用

在自动化测试中,处理复杂的页面交互是常见的需求。例如,应对动态加载的元素、处理弹窗与对话框、模拟拖放操作,甚至在绘图板上进行绘图操作。

1 动态元素与弹窗处理

1.1 动态元素的加载与等待

动态页面可能会导致元素在操作时尚未完全加载,为避免报错,需要使用 Playwright 的自动等待机制或显式等待功能。

示例:等待动态加载的元素可见

page.navigate("https://example.com/dynamic-content");
// 等待元素出现
page.waitForSelector("#dynamic-element", new Page.WaitForSelectorOptions().setState(WaitForSelectorState.VISIBLE));
String dynamicText = page.textContent("#dynamic-element");
System.out.println("动态元素内容: " + dynamicText);
1.2 处理弹窗与对话框

示例:处理浏览器的弹窗

page.onDialog(dialog -> {System.out.println("弹窗内容: " + dialog.message());dialog.accept(); // 点击确认
});
page.click("#trigger-dialog");

示例:输入对话框内容

page.onDialog(dialog -> {if (dialog.type().equals("prompt")) {dialog.accept("输入的值");}
});
page.click("#trigger-prompt");

2 模态窗口与对话框的操作

模态窗口(Modal Dialog)是网页常用的交互形式,通常在特定操作后出现,且会阻止用户与其他页面元素交互。

2.1 处理模态窗口

示例:验证模态窗口内容

// 点击触发模态窗口的按钮
page.click("#open-modal");
// 等待模态窗口的内容加载
page.waitForSelector("#modal-content");
String modalText = page.textContent("#modal-content");
System.out.println("模态窗口内容: " + modalText);
// 关闭模态窗口
page.click("#close-modal");
2.2 模态窗口中的表单操作

示例:在模态窗口中填写表单并提交

page.click("#open-modal");
// 等待表单加载
page.waitForSelector("#modal-form");
page.fill("#modal-form #username", "testuser");
page.fill("#modal-form #email", "test@example.com");
page.click("#modal-form button[type='submit']");

3 拖放操作与绘图板模拟

3.1 实现拖放操作

拖放操作在处理交互性强的页面时十分重要,例如拖拽文件、重排序列表等。

示例:拖放操作

// 定位拖放的起始元素和目标元素
Locator source = page.locator("#draggable");
Locator target = page.locator("#droppable");
// 执行拖放操作
source.dragTo(target);
3.2 在绘图板上模拟绘图

绘图板(Canvas)是一种 HTML 元素,用于实现图形绘制和用户绘图。本示例通过模拟鼠标事件绘制简单图形。

示例:在 Canvas 上绘制直线

page.navigate("https://example.com/drawing-board");// 获取 Canvas 的位置和尺寸
BoundingBox canvasBox = page.locator("#drawing-canvas").boundingBox();// 模拟绘制一条直线
page.mouse().move(canvasBox.x + 10, canvasBox.y + 10);
page.mouse().down();
page.mouse().move(canvasBox.x + 100, canvasBox.y + 100);
page.mouse().up();

4 自定义元素选择器

在某些复杂页面中,默认的选择器可能无法满足需求。Playwright 支持自定义选择器,帮助精准定位元素。

4.1 使用文本选择器

示例:通过文本内容选择元素

Locator button = page.locator("text=提交");
button.click();
4.2 使用 CSS 和 XPath

示例:通过 CSS 选择器定位元素

Locator element = page.locator("div.container > ul > li:nth-child(2)");
System.out.println("元素文本: " + element.textContent());

示例:通过 XPath 定位元素

Locator element = page.locator("xpath=//ul/li[contains(text(), '示例')]");
System.out.println("元素文本: " + element.textContent());
4.3 自定义选择器引擎

如果标准选择器无法满足需求,可以注册自定义选择器引擎。

示例:注册自定义选择器引擎

page.context().registerSelectorEngine("my-engine", new MySelectorEngine());
Locator customElement = page.locator("my-engine=my-selector");
customElement.click();

5 实际案例:复杂页面元素交互

案例描述:处理动态加载、弹窗和拖放操作的综合场景
  1. 动态加载页面,等待加载完成。
  2. 处理弹窗确认操作。
  3. 拖放元素完成指定任务。

综合案例代码

page.navigate("https://example.com/complex-interaction");// 等待动态元素加载
page.waitForSelector("#dynamic-content");
System.out.println("动态内容: " + page.textContent("#dynamic-content"));// 触发并处理弹窗
page.onDialog(dialog -> {System.out.println("弹窗信息: " + dialog.message());dialog.accept();
});
page.click("#trigger-dialog");// 拖放操作
Locator draggable = page.locator("#draggable");
Locator droppable = page.locator("#droppable");
draggable.dragTo(droppable);
System.out.println("拖放完成");

相关文章:

Playwright(Java版) - 8: Playwright 元素交互的高级应用

在自动化测试中,处理复杂的页面交互是常见的需求。例如,应对动态加载的元素、处理弹窗与对话框、模拟拖放操作,甚至在绘图板上进行绘图操作。 1 动态元素与弹窗处理 1.1 动态元素的加载与等待 动态页面可能会导致元素在操作时尚未完全加载&…...

播放器开发之ffmpeg 硬件解码方案

硬件编解码的概念 硬件编解码是⾮CPU通过烧写运⾏视频加速功能对⾼清视频流进⾏编解码,其中⾮CPU可包括GPU、FPGA或者 ASIC等独⽴硬件模块,把CPU⾼使⽤率的视频解码⼯作从CPU⾥分离出来,降低CPU的使⽤负荷,使得平台能 ⾼效且流畅…...

n、nvm、nrm、pnpm、yarn各种指令大全

n mac的版本管理工具(可能与nvm冲突) 安装 # 使用 npm / yarn npm i -g n yarn global add n # 使用 brew brew install n环境变量 export PATH"/usr/local/n/versions/node:$PATH"命令详解 版本查看 # 查看 n 版本 n --version/-V # 查…...

数据库管理-根据日期字段进行数据筛选更新数据

项目场景 数据插入、更新、查询 数据库中一张审计表格用来记录数据的操作包括数据的id,数据名称sjmc,数据状态sjzt,数据创建时间createtime,数据更新时间updatetime。 具体需求如下: 根据数据名称更新sjzt和update…...

03. 运算符

一、运算符与表达式 运算符 就是对字面量或者变量进行操作的符号;表达式 是指用运算符把字面量或者变量连接起来,符合 Python 语法的式子。不同运算符连接的表达式体现的是不同类型的表达式;Python 中的运算符主要包括 算术运算符、赋值运算符…...

【最优清零方案——贪心+滑动窗口+线段树】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e6 10; int a[N]; struct node {int l, r;int m, p, lazy; } tr[4 * N]; void pushup(node &u, node &l, node &r) {if (l.m r.m){u.m l.m;u.p max(l.p, r.…...

一个点绕任意点旋转后的点的坐标

在平面坐标上&#xff0c;任意点P(x1,y1)&#xff0c;绕一个坐标点Q(x2,y2)逆时针旋转θ角度后,新的坐标设为(x, y)的计算公式&#xff1a; x (x1 - x2)*cos(θ) - (y1 - y2)*sin(θ) x2 ; y (x1 - x2)*sin(θ) (y1 - y2)*cos(θ) y2 ; 另一个场景应用&#xff0c;坐标轴绕…...

大数据面试题每日练习--HDFS是如何工作的?

HDFS&#xff08;Hadoop Distributed File System&#xff09;是一个分布式文件系统&#xff0c;设计用于存储非常大的文件。它的主要工作原理如下&#xff1a; NameNode&#xff1a;管理文件系统的命名空间&#xff0c;维护文件目录树和文件元数据信息。NameNode记录每个文件…...

Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为

文章目录 1. visual模块的继承关系2. 基类CommonVisual的方法2.1 获取对象信息2.1.1 对象本身信息2.1.2 对象的查找表2.1.3 对象标量范围2.1.4 对象缩略图 2.2 呈现对象2.2.1 在窗口显示1.2.2 对象可见性 2.2.3 对象颜色2.2.4 对象透明度 2.3 添加标度条2.3.1 2D标度条2.3.2 3D…...

Java AIO(NIO.2)

Java AIO&#xff08;Asynchronous I/O&#xff0c;异步I/O&#xff09;&#xff0c;也被称为NIO.2&#xff0c;是Java平台提供的一种处理异步输入/输出操作的机制。作为Java NIO&#xff08;New I/O&#xff09;的扩展&#xff0c;AIO引入了一些新的API和特性&#xff0c;旨在…...

Flink 常用问题及常用配置(有用)

一、Flink 常用问题及常用配置 参数 示例 说明 execution.checkpointing.interval 3min Checkpoint 触发间隔 state.backend rocksdb / filesystem 用于设置statebackend类型, 默认会以内存为statebackend(无法支持大状态) taskmanager.memory.jvm-overhead.max 204…...

RocketMQ: 消息过滤,通信组件,服务发现

消息过滤 1 ) 简单消息过滤 /*** 订阅指定topic下tags分别等于 TagA 或 TagC 或 TagD */consumer.subscribe("TopicTest1", "TagA || TagC || TagD");如以上代码所示&#xff0c;简单消息过滤通过指定多个 Tag 来过滤消息&#xff0c;过滤的动作在服务器进…...

linux ubuntu的脚本知

目录 一、变量的引用 二、判断指定的文件是否存在 三、判断目录是否存在 四、判断最近一次命令执行是否成功 五、一些比较符号 六、"文件"的读取和写入 七、echo打印输出 八、ubuntu切换到root用户 N、其它可以参考的网址 脚本功能强大&#xff0c;用起来也…...

HTTP有哪些风险?是怎么解决的?

一、风险 HTTP是通过明文传输的&#xff0c;存在窃听风险、篡改风险以及冒充风险。 二、如何解决 HTTPS在HTTP的下层加了一个SSL/TLS层&#xff0c;保证了安全&#xff0c;通过混合加密解决窃听风险、数字签名解决篡改风险、数字证书解决冒充风险。 &#xff08;1&#xff0…...

3.12MayBeSomeLinearAlgebra

X是M*(D1),XT为&#xff08;D1)*M Ω是一行D1列&#xff0c;X乘以欧米噶是M行D1列 行是说样本个数&#xff0c;列是特征数量 如果是小样本&#xff0c;那么可能会出现特征数量大于样本个数 如果MD*DM就是M*M&#xff0c;...

学习日志015--python单链表

创建 class Node:def __init__(self,data):# 数据域self.data data# 链接域self.next Noneclass LinkList:def __init__(self,):# 初始化头节点self.head None# 记录链表的长度self.size 0 增加 #头插def insert_head(self,value):# 创建新节点node Node(value)q self…...

如何在Windows右键新建菜单中添加自定义项

Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\.py] "Python.File"[HKEY_CLASSES_ROOT\.py\ShellNew] "NullFile"""[HKEY_CLASSES_ROOT\Python.File] "FriendlyTypeName""文本.py"[HKEY_CLASSES_ROOT\Python.Fil…...

Spring Boot 3.0废弃了JavaEE,改用了Jakarta EE

Spring Boot 3.0废弃了JavaEE&#xff0c;改用了Jakarta EE 历史背景 javax变成Jakarta的主要原因是因为Java EE项目从Oracle转移到了Eclipse Foundation&#xff0c;并改名为Jakarta EE。 JavaEE是从Java 1.2版本开始推出的Java企业级开发平台&#xff0c;最初的名称是J2EE(J…...

pdf文档动态插入文字水印,45度角,旋转倾斜,位于文档中央,多行水印可插入中文

一行水印 /*** param inputFile 你的PDF文件地址* param outputFile 添加水印后生成PDF存放的地址* param waterMarkName 你的水印* return*/public static boolean waterMark(String inputFile,String outputFile, String waterMarkName){try {PdfReader reader new PdfRead…...

[ 渗透测试面试篇-2 ] 针对大规模资产的攻击思路

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

Univer:企业级协作平台开发实战

Univer&#xff1a;企业级协作平台开发实战 【免费下载链接】univer Build AI-native spreadsheets. Univer is a full-stack framework for creating and editing spreadsheets on both web and server. With Univer Platform, Univer Spreadsheets is driven directly throug…...

终极指南:免费开源fSpy相机匹配工具,3分钟实现2D图像到3D场景的完美转换

终极指南&#xff1a;免费开源fSpy相机匹配工具&#xff0c;3分钟实现2D图像到3D场景的完美转换 【免费下载链接】fSpy A cross platform app for quick and easy still image camera matching 项目地址: https://gitcode.com/gh_mirrors/fs/fSpy 还在为将2D照片转换为精…...

从理论到实践:基于EKF与1RC模型的锂离子电池SOC在线估计与Simulink仿真

1. 锂离子电池SOC估计为什么这么重要&#xff1f; 如果你用过电动车或者手机&#xff0c;肯定遇到过电量显示不准的情况。明明显示还有30%电量&#xff0c;结果突然关机&#xff1b;或者充到80%就再也充不进去了。这些问题的核心&#xff0c;都跟电池的荷电状态&#xff08;SO…...

CBAM实战指南:如何通过通道与空间注意力提升CNN模型性能

1. 为什么你的CNN模型需要CBAM注意力模块 如果你正在使用卷积神经网络&#xff08;CNN&#xff09;处理图像分类任务&#xff0c;可能会遇到这样的困境&#xff1a;模型在训练集上表现不错&#xff0c;但测试集准确率始终卡在一个瓶颈。这时候不妨试试CBAM&#xff08;Convolu…...

OpenWRT路由器如何用Zerotier实现异地组网?保姆级配置教程(含防火墙规则详解)

OpenWRT路由器通过Zerotier构建安全异地内网的完整实践指南 异地办公已成为现代企业的常态&#xff0c;而如何安全高效地访问公司内网资源则是技术人员面临的现实挑战。传统VPN方案往往配置复杂且性能受限&#xff0c;而基于P2P技术的Zerotier配合OpenWRT路由器&#xff0c;能够…...

ReadCat:开源无广告小说阅读器,为深度阅读者打造纯净体验

ReadCat&#xff1a;开源无广告小说阅读器&#xff0c;为深度阅读者打造纯净体验 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在信息爆炸的时代&#xff0c;找到一款无广告、界面…...

intv_ai_mk11保姆级教学:输入‘你好’→追问第2点→指定表格输出,完整交互链路演示

intv_ai_mk11保姆级教学&#xff1a;输入你好→追问第2点→指定表格输出&#xff0c;完整交互链路演示 1. 快速了解intv_ai_mk11 intv_ai_mk11是一款基于Llama架构的AI对话助手&#xff0c;拥有7B参数规模&#xff0c;运行在GPU服务器上。它能帮助你完成各种任务&#xff0c;…...

RWKV7-1.5B-G1A快速上手:5分钟部署你的轻量级文本生成助手

RWKV7-1.5B-G1A快速上手&#xff1a;5分钟部署你的轻量级文本生成助手 1. 为什么选择RWKV7-1.5B-G1A 如果你正在寻找一个轻量级但功能强大的文本生成模型&#xff0c;RWKV7-1.5B-G1A绝对值得考虑。这个基于RWKV-7架构的模型在1.5B参数规模下展现了出色的性能&#xff0c;特别…...

SiameseAOE模型多模态扩展探索:结合图像信息的属性抽取

SiameseAOE模型多模态扩展探索&#xff1a;结合图像信息的属性抽取 最近在做一个项目&#xff0c;需要从一堆产品说明书里自动提取技术参数。这些说明书五花八门&#xff0c;有的是纯文本PDF&#xff0c;有的则是图文混排&#xff0c;甚至有些关键参数就印在产品图片的标签上。…...

LFM2.5-1.2B-Thinking-GGUF部署教程:Ubuntu/CentOS/Debian三平台通用安装步骤

LFM2.5-1.2B-Thinking-GGUF部署教程&#xff1a;Ubuntu/CentOS/Debian三平台通用安装步骤 1. 平台简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;特别适合在资源有限的环境中快速部署。该镜像内置了GGUF模型文件和llama.cpp运行时&#xff…...