在 Playwright 中,page.get_by_*
系列方法提供了一种更语义化、更直观的方式来定位页面上的元素。这些方法基于 HTML 的语义属性(如 placeholder
、role
、label
等)或特定的 DOM 属性,能够帮助你更轻松地编写可读性高的测试代码。
以下是 Playwright 提供的所有 get_by_*
方法及其详细说明:
page.get_by_placeholder()
通过 input
元素的 placeholder
属性定位元素。
# 定位 placeholder 为 "Search..." 的输入框
search_input = page.get_by_placeholder("Search...")
search_input.fill("Playwright")
placeholder
属性区分。page.get_by_role()
根据 ARIA 角色(role
)定位元素。支持多种角色类型,如 button
、link
、textbox
等。
# 定位 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
:是否精确匹配名称(默认为模糊匹配)。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()
标签与表单控件关联时使用。page.get_by_text()
通过可见文本内容定位元素。
# 定位文本为 "Click here" 的元素
click_here_element = page.get_by_text("Click here")
click_here_element.click()
exact=True/False
:是否精确匹配文本内容(默认为模糊匹配)。page.get_by_title()
通过 title
属性定位元素。
# 定位 title 属性为 "Close" 的按钮
close_button = page.get_by_title("Close")
close_button.click()
title
属性(通常用于工具提示)。page.get_by_alt_text()
通过 alt
属性定位图像元素。
# 定位 alt 属性为 "Logo" 的图片
logo_image = page.get_by_alt_text("Logo")
logo_image.click()
alt
属性的 ![]()
元素。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
属性以方便测试。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()
所有 get_by_*
方法都返回一个 Locator
对象,因此可以与其他 Playwright 方法链式调用。
# 定位 placeholder 为 "Search..." 的输入框,并填充内容
page.get_by_placeholder("Search...").fill("Playwright")
# 定位 role="button" 且名称为 "Submit" 的按钮,并点击
page.get_by_role("button", name="Submit").click()
方法 | 匹配依据 | 示例 | 适用场景 |
---|---|---|---|
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") |
开发者为测试提供的唯一标识 |
优先使用语义化方法:
get_by_role()
和 get_by_label()
等语义化方法,可以使测试代码更具可读性和可维护性。避免硬编码选择器:
get_by_*
方法。结合开发者工具调试:
placeholder
、aria-label
、role
等),以便更好地选择合适的定位方法。希望这些方法能帮助你更高效地编写 Playwright 测试脚本!