前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微软出品自动化测试神器【Playwright+Java】系列(十一)元素定位详解

微软出品自动化测试神器【Playwright+Java】系列(十一)元素定位详解

作者头像
软件测试君
发布于 2023-09-14 07:30:08
发布于 2023-09-14 07:30:08
1K00
代码可运行
举报
文章被收录于专栏:测试人生测试人生
运行总次数:0
代码可运行
一、写在前面

又有很久没更文了,真的是被催婚搞的整个人情绪特别不好,如果硬要形容的话,那就是没法跟人正常沟通,一点就着,做什么都没耐心,看什么都烦,简直没救了...

也是偶然发现的,自己居然没写关于Playwright的元素定位,这不是自动化测试的重中之重,怎么可以忘,马上安排!

二、元素定位

主要支持定位方式有:css、xpath、text

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//选择单个元素
page.querySelector("selector");
//选择多个元素
page.querySelectorAll("selector");
//选择单个元素,并且自动等待到元素可见、可操作
page.waitForSelector("selector");

三、CSS定位

1、css+定位值

可以理解为指定为:css方式定位+使用的定位方式(css选择器语法)

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.locator("css=[type='text']")
2、通过其文本内容匹配元素

「元素标签+:has-text()」

:has-text()匹配任何包含指定文本的元素,在内部的某个地方,可能在子元素或后代元素中。匹配不区分大小写,理解为模糊匹配,应注意与其他CSS说明符一起使用,否则将匹配所有包含指定文本的元素,包括<body>

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<ElementHandle> elements = page.querySelectorAll("button:has-text("Button")");
System.out.println(elements.size());// 5
```html
#### 3、在指定元素中查找匹配文本的元素
`:text()`匹配包含指定文本的最小元素。匹配不区分大小写,还是模糊匹配,就是指定范围了。

**示例代码如下:**
```java
page.querySelector("article .ant-row :text("Open Modal")").click();
4、文本通过正则表达式匹配

匹配文本内容与类似JavaScript的正则表达式匹配的最小元素。

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.querySelector("article .ant-row :text-matches("Open M\o*dal", "i")")
5、仅匹配可见元素

示例dom:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button style='display: none'>Invisible</button>
<button>Visible</button>

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.locator("button:visible").click();

「注意:」文本匹配会规范化空格。例如,它将多个空格变成一个,将换行符变成空格,并忽略前后空格。

6、在给定范围内元素,匹配元素

给定元素的范围「的参数传递的任何选择器」至少匹配一个元素,它将返回一个元素,也是模糊匹配!「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.navigate("http://localhost:8080/wait.html");
page.querySelector("#wait").click();
String content = page.waitForSelector("div:has(p)").textContent();
System.out.println(content);
7、匹配条件之一的元素

以逗号分隔,从CSS选择器列表将匹配该列表中的选择器之一可以选择的所有元素,简单说就是从这么多列表中找到一个匹配的选择器去选择元素。「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.navigate("https://antdv.com/components/modal-cn");
page.waitForSelector("#components-modal-demo-basic .code-box-demo span").click();
page.locator("button:has-text("取 消"), button:has-text("确定")").click();
8、基于布局匹配定位元素

基于页面布局定位,上下左右之类的,会有当页面布局改变时,会出现找不到元素或者匹配其他元素的情况。

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//在promo-card附近的元素
page.locator("button:near(.promo-card)").click();
//获取(promo-card2)元素右侧元素文本
String textContent3 = page.waitForSelector("button:right-of(#card2)").textContent();
System.out.println("textContent3: "+textContent3);
//获取(promo-card2)元素左侧元素文本
String textContent1 = page.waitForSelector("button:left-of(#card2)").textContent();
System.out.println("textContent1: "+textContent1);
//获取(promo-card2)元素上面元素属性
String above = page.waitForSelector("button:above(#card2)").getAttribute("id");
System.out.println("above: "+above);
//获取(promo-card2)元素下面元素属性
String below = page.waitForSelector("button:below(#card2)").getAttribute("id");
System.out.println("below: "+below);
9、从查询结果中选择第n个元素匹配

与:nth-child()不同,元素不必是兄弟姐妹,它们可以在页面上的任何位置元素。

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.waitForSelector(":nth-match(:text('promo-card'), 2)").click();
10、第N个元素定位器

选择索引的的方式定位。

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//获取第一个元素的文本
String first = page.locator("button").locator("nth=0").textContent();
//获取最后一个元素的文本
String last = page.locator("button").locator("nth=-1").textContent();
System.out.println(first+"\n"+last);
11、仅定位可见元素

一个页面有两个按钮,第一个不可见,第二个可见,示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button style='display: none'>Invisible</button>
<button>Visible</button>

示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.locator("button").locator("visible=true").click();

三、XPath定位

任何以//或…开头的选择器被假定为xpath选择器。例如,Playwright将'//html/body'转换为'xpath=//html/body'。

1、XPath混合使用

特性就是管道符|的使用,在XPath中可指定多个选择器。它将匹配该列表中的选择器之一可以选择的所有元素。

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.navigate("https://antdv.com/components/modal-cn");
page.querySelector("#components-modal-demo-basic .code-box-demo span").click();
page.locator("//div[@id='vcDialogTitle0']|//div[@role='documentcontent']").waitFor();
System.out.println();
2、常见XPath定位使用

完全支持XPath定位和CSS语法,这里没法可说的,个人感觉是完美兼容SeleniumCSS 、XPath定位定位方式的,参考学习CSS定位入门、XPATH定位入门这两篇。

四、使用文本定位

使用文本定位:以引号 "" 或者 ' 开头的,可以判定为文本定为文本定位。

1、包含

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//包含
String content = page.textContent("button:text('card0')");
2、严格匹配

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//严格匹配
String content1 = page.textContent("button:text-is('card0')");
3、正则表达式匹配

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//正则
String content2 = page.textContent("button:text-matches("ca\r*d0")");

五、使用属性选择器定位

不是CSS选择器,因此不支持任何特定于CSS的选项。

「示例代码如下:」

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.fill("id=user","username1");
page.type("data-testid=testid","username2");

六、使用链式选择器定位

选择器被链接时,下一个选择器相对于前一个选择器的结果被查询,个人感觉就是按照层级去定位元素。

示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page.navigate("https://2x.antdv.com/components/modal-cn");
page.click("#components-modal-demo-basic .code-box-demo span");
page.click("div[role="dialog"] >> div[role="document"] >> text="取 消"");
System.out.println();

七、写在最后

Playwright系列的第九篇文中说,一个不留神就更新API了,请大家原谅我哈!

不但英文不好,而且眼神也不好,尴尬,这是第一次,也是最后一次!

我会在后面的文章中陆续把落下的补上,随着这几天的熟悉使用,有时帮我觉得它比selenium更出色,不知道是不是我的幻觉?

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023/03/07 08:30:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微软出品自动化测试神器Playwright,不用写一行代码(Playwright+Java)系列(一) 之 环境搭建及脚本录制
半年前,偶然在视频号刷到某机构正在直播讲解Playwright框架的使用,就看了一会,感觉还不错,便被种草,就想着自己有时间也可以自己学一下,这一想着就半年多过去了。
软件测试君
2022/12/05
2.5K0
微软出品自动化测试神器Playwright,不用写一行代码(Playwright+Java)系列(一) 之 环境搭建及脚本录制
微软出品自动化神器【Playwright+Java】系列(十)这些必会的骚操作,会助你一臂之力!
那一刻,我突然感觉我可能真的也就这样了,不会有人喜欢,也不会结婚,只能是孤独终老了!
软件测试君
2023/09/14
6980
微软出品自动化神器【Playwright+Java】系列(十)这些必会的骚操作,会助你一臂之力!
使用 Playwright 进行元素定位
在自动化测试和网页爬取中,定位页面元素是一项重要的任务。Playwright 提供了多种方式来定位页面元素,包括通过 CSS 选择器、XPath 和文本内容等。在本文中,我们将介绍如何使用 Playwright 进行元素定位。
霍格沃兹测试开发Muller老师
2024/05/12
7520
微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新页面、录制、页面对象模式操作
关于Playwright系列的文章,真的很久没有写了,今天一个不小心官方API部分过完了,下面将为大家逐一演示,感兴趣的同学可以自行动手练习。
软件测试君
2023/02/20
3.5K0
微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新页面、录制、页面对象模式操作
腾讯出品小程序自动化测试框架【Minium】系列(三)元素定位详解
元素定位,应该是很多UI自动化测试入门学习必会的技能了,下面我将为大家举例演示元素定位的几种方法。
软件测试君
2023/02/24
1.4K0
腾讯出品小程序自动化测试框架【Minium】系列(三)元素定位详解
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-18- 操作模态对话框弹窗 (详细教程)
我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识。宏哥在java+selenium系列文章中介绍过这部分内容。那么,playwright对于弹框的处理是怎样的?是否比selenium更加简单呢?之前宏哥在Python+Playwright系列文章中也介绍过,看一下Java和Python的处理是否有区别?下面宏哥就来介绍一下playwright对于弹框的处理。自己在文章中查找答案。
北京-宏哥
2025/01/19
2220
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-18- 操作模态对话框弹窗 (详细教程)
【Playwright+Python】系列教程(二)手把手带你写一个自动化测试脚本
在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下:
软件测试君
2024/07/02
8460
【Playwright+Python】系列教程(二)手把手带你写一个自动化测试脚本
PlayWright(五)- 元素定位
上文我们已经掌握好怎么启动playwright了,我们就可以开启playwright的正式学习之路了?
似小陈吖
2023/10/17
1.6K0
PlayWright(五)- 元素定位
【Playwright+Python】系列教程(五)元素定位
定位器是 Playwright 自动等待和重试能力的核心部分。简而言之,定位器代表了一种随时在页面上查找元素的方法,以下是常用的内置定位器。
软件测试君
2024/07/12
1.2K0
【Playwright+Python】系列教程(五)元素定位
微软出品自动化神器【Playwright+Java】系列(七) 之 元素的可操作性验证
昨天在某平台发表了一篇这系列的文章,结果不但提示说有违禁词(Java也算?),然后文章审核通过后,文章还找不到,不到去哪了,表示很郁闷,去反应未果,确实有点尴尬了。
软件测试君
2023/02/24
1K0
微软出品自动化神器【Playwright+Java】系列(七) 之 元素的可操作性验证
【学员作品】Playwright自动化测试工具之元素定位实战
https://playwright.dev/python/docs/api/class-elementhandle/#element_handleis_visible
IT苦逼一枚
2021/04/16
3K0
【学员作品】Playwright自动化测试工具之元素定位实战
Puppeteer:从零出发,全面掌握浏览器自动化神器
Puppeteer 译为木偶,是一个 Node.js 库,内部通过 DevTools 协议提供控制 Chrome 或 Firefox 的一系列 API。通过定义可以看出 Puppeteer 的核心在于提供用户控制浏览器行为的方法,以下是一些自动化入门示例:
前端小鑫同学
2024/07/12
3K0
微软出品自动化神器【Playwright+Java】系列(五) 之 常见点击事件操作
明天就是周五了,这周有那么一两天心情特别不好,真的是做什么都没兴致,所以导致整个人都很丧,什么都不想做。
软件测试君
2022/12/05
1.9K0
微软出品自动化神器【Playwright+Java】系列(五) 之  常见点击事件操作
【python自动化】Playwright基础教程(九)-悬浮元素定位&自定义ID定位&组合定位&断言
selenium&playwright获取网站Authorization鉴权实现伪装requests请求
梦无矶小仔
2023/10/04
1.2K0
【python自动化】Playwright基础教程(九)-悬浮元素定位&自定义ID定位&组合定位&断言
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-6- 元素基础定位方式-上篇 (详细教程)
从这篇文章开始,就开始要介绍UI自动化核心的内容,也是最困难的部分了,就是:定位元素,并去对定位到的元素进行一系列相关的操作。想要对元素进行操作,第一步,也是最重要的一步,就是要找到这个元素,如果连元素都定位不到,后续什么操作都是无用功,都是扯淡,因此宏哥建议小伙伴或者同学们从这里开始就要跟紧宏哥的脚步,一步一个脚印的将基础打结实,不要到后期了要定位操作元素了,到处找人问到处碰壁。说到元素定位,小伙伴或者童鞋们肯定会首先想到 selenium 的八大元素定位大法。同理Playwright也有自己的元素定位的方法。今天就给小伙伴或者童鞋们讲解和分享一下Playwright的元素定位方法。其实在Python+Playwright自动化测试系列文章中也介绍过元素定位,宏哥看一下Java和Python的几乎是大同小异,只不过是Java和Python语法格式的区别,其他的大差不差。但是为了这一系列文字的完整和连贯,宏哥还是将其讲解和分享一下。
北京-宏哥
2024/12/24
3840
【python自动化】Playwright基础教程(三)定位操作
上文我们已经能够成功进行登录操作了。对于里面的一些定位方式,输入,点击等操作,在这一节,我们直接进行一个大汇总。以后遇到直接来这里搜。
梦无矶小仔
2023/09/19
1.8K0
【python自动化】Playwright基础教程(三)定位操作
微软出品自动化神器【Playwright+Java】系列(六) 之 字符输入、单元素键盘事件操作、上传文件、聚焦、拖拽、悬浮操作
很久没更新这系列的文章了,那么我们将Playwright+Java系列延续,带上自己的那份快乐开始吧!
软件测试君
2023/02/24
1.3K0
微软出品自动化神器【Playwright+Java】系列(六) 之 字符输入、单元素键盘事件操作、上传文件、聚焦、拖拽、悬浮操作
软件测试|web自动化测试神器playwright(五)
在web自动化测试中,frame是我们绕不开的一个东西,也是我们很头疼的东西,selenium处理frame,需要切换到frame中,然后再切换出来,操作比较麻烦,那么playwright对于frame的操作会不会更加简单呢?
霍格沃兹测试开发Muller老师
2023/08/08
4220
软件测试|web自动化测试神器playwright(五)
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)
上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的基础定位方式的理论基础知识以及在什么情况下推荐使用。今天这一篇讲解和分享一下剩下部分的基础定位方式。
北京-宏哥
2024/12/25
2420
快速进行UI自动化
最近团队少了好些人,有点忙不过来,虽然是有覆盖好多API测试,但是端到端的测试,还是少不了UI。
赵云龙龙
2024/01/15
3400
快速进行UI自动化
推荐阅读
微软出品自动化测试神器Playwright,不用写一行代码(Playwright+Java)系列(一) 之 环境搭建及脚本录制
2.5K0
微软出品自动化神器【Playwright+Java】系列(十)这些必会的骚操作,会助你一臂之力!
6980
使用 Playwright 进行元素定位
7520
微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新页面、录制、页面对象模式操作
3.5K0
腾讯出品小程序自动化测试框架【Minium】系列(三)元素定位详解
1.4K0
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-18- 操作模态对话框弹窗 (详细教程)
2220
【Playwright+Python】系列教程(二)手把手带你写一个自动化测试脚本
8460
PlayWright(五)- 元素定位
1.6K0
【Playwright+Python】系列教程(五)元素定位
1.2K0
微软出品自动化神器【Playwright+Java】系列(七) 之 元素的可操作性验证
1K0
【学员作品】Playwright自动化测试工具之元素定位实战
3K0
Puppeteer:从零出发,全面掌握浏览器自动化神器
3K0
微软出品自动化神器【Playwright+Java】系列(五) 之 常见点击事件操作
1.9K0
【python自动化】Playwright基础教程(九)-悬浮元素定位&自定义ID定位&组合定位&断言
1.2K0
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-6- 元素基础定位方式-上篇 (详细教程)
3840
【python自动化】Playwright基础教程(三)定位操作
1.8K0
微软出品自动化神器【Playwright+Java】系列(六) 之 字符输入、单元素键盘事件操作、上传文件、聚焦、拖拽、悬浮操作
1.3K0
软件测试|web自动化测试神器playwright(五)
4220
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)
2420
快速进行UI自动化
3400
相关推荐
微软出品自动化测试神器Playwright,不用写一行代码(Playwright+Java)系列(一) 之 环境搭建及脚本录制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档