自动等待(Auto-waiting)

Playwright 在发起操作前在元素上执行一系列可操作性检查(actionability checks),确保这些操作的行为与预期一样。它自动等待所有相关检查通过,然后执行请求的操作。如果在给定的超时时间内,需要的检查没通过,那么操作以 TimeoutError 失败。

比如,对于 page.click(selector, **kwargs),Playwright 将确保:

以下是对每个操作执行的可操作性检查的完整列表:

ActionAttachedVisibleStableReceives EventsEnabledEditable
checkYesYesYesYesYes-
clickYesYesYesYesYes-
dblclickYesYesYesYesYes-
setCheckedYesYesYesYesYes-
tapYesYesYesYesYes-
uncheckYesYesYesYesYes-
hoverYesYesYesYes--
scrollIntoViewIfNeededYes-Yes---
screenshotYesYesYes---
fillYesYes--YesYes
selectTextYesYes----
dispatchEventYes-----
focusYes-----
getAttributeYes-----
innerTextYes-----
innerHTMLYes-----
pressYes-----
setInputFilesYes-----
selectOptionYesYes--Yes-
textContentYes-----
typeYes-----

强制操作

一些操作(比如 page.click(selector, **kwargs))支持 force 选项,它禁用不必要的可操作性检查,比如给 page.click(selector, **kwargs) 方法传递真 force 将不检查目标元素是否真正地接收点击事件。


断言

你也可使用下面的方法检查元素的可操作性状态。这通常不需要,但它有助于写断言测试,确保在特定的操作后,元素到达可操作状态:


已附加(Attached)

当元素连接(connected)到 Document 或 ShadowRoot 时,认为它已附加。


可见的(Visible)

当元素有非空边界框,没有 visibility:hidden 计算样式时,认为它是可见的。注意零大小或具有 display:none 的元素被认为是不可见的。


稳定的(Stable)

元素在至少两个连续动画帧中保持相同的边界框时被认为是稳定的。


启用的(Enable)

元素被认为是启用的,除非它是具有 disabled 属性的 <button><select><input><textarea>


可编辑的(Editable)

元素在被启用(enabled),并且没有 readonly 属性设置时,被认为是可编辑的。


接收事件

当元素是操作点上指针事件的命中目标时,认为它接收指针事件。比如,当点击点 (10;10) 时,Playwright 检查是否有其它元素(通常是覆盖)将捕获在 (10;10) 处的点击。

比如,考虑一种场景,不管何时进行 page.click(selector, **kwargs) 调用,Playwright 将点击 Sign Up 按钮: