使用 Playwright 进行元素定位

news/2024/9/27 15:23:01

前言

在自动化测试和网页爬取中,定位页面元素是一项重要的任务。Playwright 提供了多种方式来定位页面元素,包括通过 CSS 选择器、XPath 和文本内容等。在本文中,我们将介绍如何使用 Playwright 进行元素定位。

CSS 选择器定位元素

使用 CSS 选择器是一种常见且灵活的方式来定位页面元素。Playwright 提供了 locator 对象,可以通过 locator.query_selector() 方法来使用 CSS 选择器定位元素。以下是一个示例:

from playwright.sync_api import sync_playwrightdef main():with sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto('https://example.com')element = page.locator('h1')print("Element text:", element.text())browser.close()if __name__ == "__main__":main()

在这个示例中,我们使用 CSS 选择器'h1'定位页面中的标题元素。然后,我们使用 element.text() 方法获取元素的文本内容并打印输出。

使用 XPath 定位元素

XPath 是另一种常用的定位页面元素的方式,特别适用于复杂的页面结构。Playwright 也支持使用 XPath 来定位元素。以下是一个示例:

from playwright.sync_api import sync_playwrightdef main():with sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto('https://example.com')element = page.locator('//h1')print("Element text:", element.text())browser.close()if __name__ == "__main__":main()

在这个示例中,我们使用 XPath 表达式 '//h1' 定位页面中的标题元素。然后,我们同样使用 element.text() 方法获取元素的文本内容并打印输出。

文本内容定位元素

有时候,我们可能需要根据元素的文本内容来定位元素。Playwright 提供了 locator 对象的 with_text() 方法来实现这一功能。以下是一个示例:

from playwright.sync_api import sync_playwrightdef main():with sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto('https://example.com')element = page.locator('text="Example Domain"')print("Element text:", element.text())browser.close()if __name__ == "__main__":main()

在这个示例中,我们使用 text="Example Domain" 来定位文本内容为 "Example Domain" 的元素。然后,我们同样使用 element.text() 方法获取元素的文本内容并打印输出。

注:

  • text=xxxx 没有加引号(单引号或者双引号),模糊匹配,对大小写不敏感
  • text='xxxx' 有引号,精确匹配,对大小写敏感

使用示例,比如点击百度首页上的“新闻” 文本,我们可以看到“新闻”是一个a标签

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000)page = browser.new_page()page.goto("https://www.baidu.com")print(page.title())page.click('text=新闻')page.wait_for_timeout(5000)browser.close()

其他定位方法

playwright还提供了其他内置的定位方法,常用的如下:

  • page.get_by_role()通过显式和隐式可访问性属性进行定位
  • page.get_by_text()通过文本内容定位
  • page.get_by_label()通过关联标签的文本定位表单控件
  • page.get_by_placeholder()按占位符定位输入
  • page.get_by_alt_text()通过替代文本定位元素,通常是图像
  • page.get_by_title()通过标题属性定位元素
  • page.get_by_test_id()根据data-testid属性定位元素(可以配置其他属性)

使用示例

page.get_by_label("User Name").fill("muller")
page.get_by_label("Password").fill("secret-password")
page.get_by_role("button", name="Sign in").click()
expect(page.get_by_text("Welcome, muller!")).to_be_visible()

总结

本篇文章主要介绍了playwright的定位方式,playwright支持CSS和xpath这两种最常用的定位方式,还有部分内置的定位方式。后续我们将介绍playwright对元素操作的方法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

育种技术发展的四个阶段

001、 reference: 01:https://mp.weixin.qq.com/s?__biz=MzkyOTMzODM3MA==&mid=2247485443&idx=1&sn=3da20ff3697c84925ad4ff580ff99bc2&chksm=c20a4d6ef57dc478a6a76f2cf3c07f0b39e7d1fe0aacedac323afa456447a0df9e060cf77c0f&mpshare=1&scene=23&…

H2 数据库介绍(1)--简介

H2 是一个使用 Java 编写的数据库,支持内存、文件等数据存储模式,可用于测试及 Demo 应用;本文主要介绍其基本概念及安装。 1、H2 特点速度很快、开源、JDBC API 嵌入式和服务器模式;基于磁盘或内存的数据库 事务支持,多版本并发 基于浏览器的控制台应用程序 加密数据库 全…

使用 Playwright 控制浏览器的启动、停止和等待

简介 Playwright 是一个强大的自动化测试工具,它不仅可以模拟用户在浏览器中的行为,还能够灵活控制浏览器的启动、停止和等待操作。在本文中,我们将探讨如何使用 Playwright 进行这些操作。 启动停止浏览器 我们之前是使用with方法来控制浏览器启动和停止,现在我们来介绍一…

playwright使用:启动浏览器与多种运行方式

前言 在本文中,我们将介绍如何使用Playwright这一现代化的浏览器自动化工具来启动浏览器,并深入了解其运行方式。Playwright是一个功能强大的工具,可以帮助开发人员自动化测试、网页截图、信息提取等任务。它支持多种浏览器,包括Chrome、Firefox和WebKit。 启动浏览器 上一…

sql学习:终于把sql case语句使用讲明白了,一看就懂

作者 | 幸福it民工 来源 | 今日头条 在数据库查询分析中,经常遇到case条件判断,总结出来供大家参考,下面通过两个实例给大家讲解。 case用途介绍: CASE是多条件分支语句,相比IF…ELSE语句,CASE语句进行分支流程控制可以使代码更加晰,易于理解。CASE语句也根据表达式逻辑值…

MajorDoMo RCE(CNVD-2024-02175)

影响平台 MajorDoMo < 0662e5e 漏洞复现 fofa 搜索语法:app="MajordomoSL" POC: GET /modules/thumb/thumb.php?url=cnRzcDovL2EK&debug=1&transport=%7c%7c%20%28%65%63%68%6f%20%27%5b%53%5d%27%3b%20%65%63%68%6f%20%31%32%33%3b%20%65%63%68%6f%20…

SpringBoot3集成WebSocket

WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工、双向的通信通道,使得客户端和服务器之间的数据交换变得更加简单。标签:WebSocket,Session,Postman。一、简介 WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工、双向的通信通道,使得客户端和服…

神器!使用Python 轻松识别验证码

前言 在我们进行自动化测试的过程中,免不了要在登录时遇到验证码,很多时候我们都是只能找开发要万能验证码或者暂时关闭验证码这个功能,但是有时候我们必须要验证码是否能够正常生成,所以在这个时候,我们需要做的就是输入验证码,但是验证码这个东西是随机生成的,不是每一…