Locator
Locator 是 Browser Mode 的元素查询与交互核心 API。你可以通过 page.getBy* 或 page.locator() 构建查询链,再执行交互操作。具体执行语义由 browser provider 决定。
使用 Playwright provider 时,Locator 交互方法(如 click、fill、check)会自动等待元素进入可操作状态(可见、启用、稳定)后再执行,你不需要在操作前手动等待元素。这与 expect.element 断言的自动重试机制不同。
下面的示例展示了典型工作流:查询元素、执行交互,并配合 expect.element 进行断言。
page
- 类型:
BrowserPage
page 是测试里的起点:先用 page 定位元素,再在返回的 Locator 上执行交互和断言。
page 是仅用于查询的对象:只负责创建 Locator,不直接执行交互动作。
上面的 submitButton 是一个 Locator,后续可以继续链式调用(例如 .click())或传给 expect.element(...) 做断言。
BrowserPage
- 类型:
Pick<Locator, 'locator' | 'getByRole' | 'getByText' | 'getByLabel' | 'getByPlaceholder' | 'getByAltText' | 'getByTitle' | 'getByTestId'>
BrowserPage 是 page 的类型定义,只暴露查询入口,不包含 click、fill 等交互方法。
也就是说,你需要先通过 page 拿到 Locator,再在 Locator 上调用交互和断言。
查询 API
以下 API 都会返回新的 Locator,可继续链式调用。
locator
- 类型:
(selector: string) => Locator
通过 CSS selector 查询元素。
getByRole
- 类型:
(role: string, options?: LocatorGetByRoleOptions) => Locator
按语义角色查询元素,推荐优先使用。
LocatorGetByRoleOptions 支持:name、exact、checked、disabled、expanded、selected、pressed、includeHidden、level。
getByText
- 类型:
(text: string | RegExp, options?: { exact?: boolean }) => Locator
按可见文本查询。
getByLabel
- 类型:
(text: string | RegExp, options?: { exact?: boolean }) => Locator
按表单 label 查询。
getByPlaceholder
- 类型:
(text: string | RegExp, options?: { exact?: boolean }) => Locator
按 placeholder 查询。
getByAltText
- 类型:
(text: string | RegExp, options?: { exact?: boolean }) => Locator
按 alt 文本查询。
getByTitle
- 类型:
(text: string | RegExp, options?: { exact?: boolean }) => Locator
按 title 查询。
getByTestId
- 类型:
(text: string | RegExp) => Locator
按 test id 查询。
配置 API
setTestIdAttribute
- 类型:
(attribute: string) => Promise<void>
设置 getByTestId() 使用的属性名。默认值是 data-testid。
这个配置会通过 Browser Mode 通道转发到 host provider(例如 Playwright 的 selectors.setTestIdAttribute())。
这是全局配置,建议在测试 setup 阶段统一设置一次,避免在用例执行中途修改导致查询行为不一致。
建议在 setup 文件中配置 setTestIdAttribute,确保所有测试统一生效:
然后在配置中引用:
组合 API
filter
- 类型:
(options: LocatorFilterOptions) => Locator
LocatorFilterOptions 支持:
hasText?: string | RegExp:保留文本匹配的元素hasNotText?: string | RegExp:排除文本匹配的元素has?: Locator:保留包含子 Locator 的元素hasNot?: Locator:排除包含子 Locator 的元素
用于在已有查询结果上做二次过滤。
and / or
- 类型:
(other: Locator) => Locator
合并两个 Locator 条件。
nth / first / last
- 类型:
nth(index: number): Locatorfirst(): Locatorlast(): Locator
在匹配集合中选择指定元素。
交互 API
以下 API 会触发实际浏览器操作,并返回 Promise<void>。
这些 *Options 类型表示 Browser Mode 当前稳定支持的一组选项:
LocatorClickOptions/LocatorDblclickOptions:button、delay、force、modifiers、position、timeout、trial(click额外支持clickCount)LocatorHoverOptions:force、modifiers、position、timeout、trialLocatorPressOptions:delay、timeoutLocatorFillOptions:force、timeoutLocatorCheckOptions:force、position、timeout、trialLocatorFocusOptions/LocatorBlurOptions/LocatorScrollIntoViewIfNeededOptions:timeoutLocatorWaitForOptions:state(attached/detached/visible/hidden)与timeoutLocatorSelectOptionOptions:force、timeoutLocatorSetInputFilesOptions:timeout
click
- 类型:
(options?: LocatorClickOptions) => Promise<void>
点击当前 Locator 匹配到的元素。
dblclick
- 类型:
(options?: LocatorDblclickOptions) => Promise<void>
对元素执行双击操作。
hover
- 类型:
(options?: LocatorHoverOptions) => Promise<void>
将鼠标悬停到元素上,常用于触发 hover 菜单或 tooltip。
press
- 类型:
(key: string, options?: LocatorPressOptions) => Promise<void>
在元素上发送键盘按键。
fill
- 类型:
(value: string, options?: LocatorFillOptions) => Promise<void>
设置输入框值,适用于 input、textarea 等可输入元素。
clear
- 类型:
() => Promise<void>
清空当前输入元素的值。
focus
- 类型:
(options?: LocatorFocusOptions) => Promise<void>
让元素获得焦点。
blur
- 类型:
(options?: LocatorBlurOptions) => Promise<void>
让元素失去焦点。
check
- 类型:
(options?: LocatorCheckOptions) => Promise<void>
勾选 checkbox 或 radio。
uncheck
- 类型:
(options?: LocatorCheckOptions) => Promise<void>
取消勾选 checkbox。
scrollIntoViewIfNeeded
- 类型:
(options?: LocatorScrollIntoViewIfNeededOptions) => Promise<void>
必要时滚动页面,使元素进入可视区域。
waitFor
- 类型:
(options?: LocatorWaitForOptions) => Promise<void>
等待 Locator 满足条件后继续执行,适合处理异步渲染。
dispatchEvent
- 类型:
(type: string, eventInit?: LocatorDispatchEventInit) => Promise<void>
在元素上派发自定义事件或原生事件。
selectOption
- 类型:
(value: string | string[], options?: LocatorSelectOptionOptions) => Promise<void>
选择 select 元素的 option。当前只支持 string 或 string[] 作为 value。
setInputFiles
- 类型:
(files: string | string[], options?: LocatorSetInputFilesOptions) => Promise<void>
为 input[type="file"] 设置文件。当前只支持文件路径 string 或 string[]。
使用约束
- 本页列出的 API 是当前支持的 Playwright Locator API 子集,未列出的 API 暂不可用
and/or/filter({ has | hasNot })的参数必须是@rstest/browser返回的LocatordispatchEvent(type, eventInit?)的type必须是非空字符串selectOption目前仅支持string或string[]setInputFiles目前仅支持文件路径string或string[]- 部分参数会通过 Browser Mode 通信通道传输,建议保持可被 JSON 序列化
与 expect.element 配合
Locator 一般与 expect.element(locator) 配合使用。完整断言列表见 Assertion。