【playwright篇】教程(十一)page.get_by_xx类型方法

在 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 测试脚本!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值