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

【playwright】 page.get_by_类型方法

在 Playwright 中,page.get_by_* 系列方法提供了一种更语义化、更直观的方式来定位页面上的元素。这些方法基于 HTML 的语义属性(如 placeholderrolelabel 等)或特定的 DOM 属性,能够帮助你更轻松地编写可读性高的测试代码。

以下是 Playwright 提供的所有 get_by_* 方法及其详细说明:


1. page.get_by_placeholder()

功能

通过 input 元素的 placeholder 属性定位元素。

示例
# 定位 placeholder 为 "Search..." 的输入框
search_input = page.get_by_placeholder("Search...")
search_input.fill("Playwright")
适用场景
  • 页面中有多个输入框,但可以通过 placeholder 属性区分。

2. page.get_by_role()

功能

根据 ARIA 角色(role)定位元素。支持多种角色类型,如 buttonlinktextbox 等。

示例
# 定位 role="button" 且名称为 "Submit" 的按钮
submit_button = page.get_by_role("button", name="Submit")
submit_button.click()# 定位 role="link" 且名称为 "Home" 的链接
home_link = page.get_by_role("link", name="Home")
home_link.click()
常用参数
  • name:匹配元素的可访问名称(通常是文本内容或 aria-label 属性)。
  • exact=True/False:是否精确匹配名称(默认为模糊匹配)。
适用场景
  • 根据 ARIA 角色和名称定位交互元素(如按钮、链接、输入框等)。

3. page.get_by_label()

功能

通过关联的 <label> 元素定位表单控件(如输入框、复选框等)。

示例
# 定位 label 为 "Username" 的输入框
username_input = page.get_by_label("Username")
username_input.fill("JohnDoe")# 定位 label 为 "Remember me" 的复选框
remember_me_checkbox = page.get_by_label("Remember me")
remember_me_checkbox.check()
适用场景
  • 表单中有 <label> 标签与表单控件关联时使用。

4. page.get_by_text()

功能

通过可见文本内容定位元素。

示例
# 定位文本为 "Click here" 的元素
click_here_element = page.get_by_text("Click here")
click_here_element.click()
常用参数
  • exact=True/False:是否精确匹配文本内容(默认为模糊匹配)。
适用场景
  • 需要根据页面上的可见文本定位元素。

5. page.get_by_title()

功能

通过 title 属性定位元素。

示例
# 定位 title 属性为 "Close" 的按钮
close_button = page.get_by_title("Close")
close_button.click()
适用场景
  • 元素有 title 属性(通常用于工具提示)。

6. page.get_by_alt_text()

功能

通过 alt 属性定位图像元素。

示例:
# 定位 alt 属性为 "Logo" 的图片
logo_image = page.get_by_alt_text("Logo")
logo_image.click()
适用场景
  • 需要定位具有 alt 属性的 <img> 元素。

7. page.get_by_test_id()

功能

通过自定义的 data-testid 属性定位元素。

示例
# 定位 data-testid="submit-button" 的按钮
submit_button = page.get_by_test_id("submit-button")
submit_button.click()
适用场景
  • 在开发中为元素添加了 data-testid 属性以方便测试。

8. page.get_by_label() 和 page.get_by_role() 的组合使用

有时,标签和角色可以结合使用来更精确地定位元素。

示例
# 定位 role="checkbox" 且 label 为 "Accept terms" 的复选框
accept_terms_checkbox = page.get_by_role("checkbox", name="Accept terms")
accept_terms_checkbox.check()

9. 常用方法的链式调用

所有 get_by_* 方法都返回一个 Locator 对象,因此可以与其他 Playwright 方法链式调用。

示例
# 定位 placeholder 为 "Search..." 的输入框,并填充内容
page.get_by_placeholder("Search...").fill("Playwright")# 定位 role="button" 且名称为 "Submit" 的按钮,并点击
page.get_by_role("button", name="Submit").click()

10. 总结对比

方法匹配依据示例适用场景
get_by_placeholder()input 元素的 placeholder 属性page.get_by_placeholder("Search...")输入框的占位符文本
get_by_role()ARIA 角色和名称page.get_by_role("button", name="Submit")按钮、链接、输入框等交互元素
get_by_label()<label> 标签的文本page.get_by_label("Username")表单控件(输入框、复选框等)
get_by_text()可见文本内容page.get_by_text("Click here")页面上的可见文本
get_by_title()title 属性page.get_by_title("Close")工具提示或标题属性
get_by_alt_text()alt 属性page.get_by_alt_text("Logo")图片的替代文本
get_by_test_id()自定义的 data-testid 属性page.get_by_test_id("submit-button")开发者为测试提供的唯一标识

最佳实践

  1. 优先使用语义化方法

    • 使用 get_by_role() 和 get_by_label() 等语义化方法,可以使测试代码更具可读性和可维护性。
  2. 避免硬编码选择器

    • 尽量避免直接使用 CSS 或 XPath 选择器,而应优先使用 get_by_* 方法。
  3. 结合开发者工具调试

    • 使用浏览器开发者工具查看元素的属性(如 placeholderaria-labelrole 等),以便更好地选择合适的定位方法。

希望这些方法能帮助你更高效地编写 Playwright 测试脚本!

http://www.xdnf.cn/news/135973.html

相关文章:

  • 【RedisLockRegistry】分布式锁
  • NS3-虚拟网络与物理网络的交互-2 FdNetDevice文件描述符网络设备
  • CMake ctest
  • 手搓传染病模型(SIR)
  • Git 入门知识详解
  • 人工智能与机器学习:Python从零实现逻辑回归模型
  • 【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题)
  • 分享Matlab成功安装Support Package硬件支持包的方法
  • 第二章 信息技术发展(2.1 信息技术及其发展)
  • 达梦数据库运维
  • 常见缓存淘汰算法(LRU、LFU、FIFO)的区别与实现
  • MYSQL 常用字符串函数 和 时间函数详解
  • MyBatisPlus文档
  • 路由器的基础配置全解析:静态动态路由 + 华为 ENSP 命令大全
  • 一种专用车辆智能配电模块的设计解析:技术革新与未来展望
  • 京东以图搜图(拍立淘)API接口返回参数详解
  • ALTER TABLE 之痛 - 为何我们需要在线表结构变更?
  • 大数据开发环境的安装,配置(Hadoop)
  • 在 Spring Boot 中实现 WebSockets
  • 手写Java线程池与定时器:彻底掌握多线程任务调度
  • Linux驱动开发快速上手指南:从理论到实战
  • 液体神经网络LNN-Attention创新结合——基于液体神经网络的时间序列预测(PyTorch框架)
  • C++面试复习(7)2025.4.25
  • 珍爱网:从降本增效到绿色低碳,数字化新基建价值凸显
  • 【Java】Maven3.5.0安装
  • Operating System 实验二 内存管理实验
  • 驱动开发硬核特训 · Day 21(上篇) 抽象理解 Linux 子系统:内核工程师的视角
  • 三格电子——CAN消防设备光纤联网常见布线方式答疑
  • 【不同名字的yolo的yaml文件名是什么意思】
  • [特殊字符] Docker 从入门到实战:全流程教程 + 项目部署指南(含镜像加速)