【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 为 "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()
适用场景
  • 表单中有  标签与表单控件关联时使用。

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 属性的  元素。

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()  标签的文本 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 测试脚本!

你可能感兴趣的:(前端,javascript,java)