Playwright 在发起操作前在元素上执行一系列可操作性检查(actionability checks),确保这些操作的行为与预期一样。它自动等待所有相关检查通过,然后执行请求的操作。如果在给定的超时时间内,需要的检查没通过,那么操作以 TimeoutError
失败。
比如,对于 page.click(selector, **kwargs),Playwright 将确保:
以下是对每个操作执行的可操作性检查的完整列表:
Action | Attached | Visible | Stable | Receives Events | Enabled | Editable |
---|---|---|---|---|---|---|
check | Yes | Yes | Yes | Yes | Yes | - |
click | Yes | Yes | Yes | Yes | Yes | - |
dblclick | Yes | Yes | Yes | Yes | Yes | - |
setChecked | Yes | Yes | Yes | Yes | Yes | - |
tap | Yes | Yes | Yes | Yes | Yes | - |
uncheck | Yes | Yes | Yes | Yes | Yes | - |
hover | Yes | Yes | Yes | Yes | - | - |
scrollIntoViewIfNeeded | Yes | - | Yes | - | - | - |
screenshot | Yes | Yes | Yes | - | - | - |
fill | Yes | Yes | - | - | Yes | Yes |
selectText | Yes | Yes | - | - | - | - |
dispatchEvent | Yes | - | - | - | - | - |
focus | Yes | - | - | - | - | - |
getAttribute | Yes | - | - | - | - | - |
innerText | Yes | - | - | - | - | - |
innerHTML | Yes | - | - | - | - | - |
press | Yes | - | - | - | - | - |
setInputFiles | Yes | - | - | - | - | - |
selectOption | Yes | Yes | - | - | Yes | - |
textContent | Yes | - | - | - | - | - |
type | Yes | - | - | - | - | - |
一些操作(比如 page.click(selector, **kwargs))支持 force
选项,它禁用不必要的可操作性检查,比如给 page.click(selector, **kwargs) 方法传递真 force
将不检查目标元素是否真正地接收点击事件。
你也可使用下面的方法检查元素的可操作性状态。这通常不需要,但它有助于写断言测试,确保在特定的操作后,元素到达可操作状态:
当元素连接(connected)到 Document 或 ShadowRoot 时,认为它已附加。
当元素有非空边界框,没有 visibility:hidden
计算样式时,认为它是可见的。注意零大小或具有 display:none
的元素被认为是不可见的。
元素在至少两个连续动画帧中保持相同的边界框时被认为是稳定的。
元素被认为是启用的,除非它是具有 disabled
属性的 <button>
、<select>
、<input>
或 <textarea>
。
元素在被启用(enabled),并且没有 readonly
属性设置时,被认为是可编辑的。
当元素是操作点上指针事件的命中目标时,认为它接收指针事件。比如,当点击点 (10;10)
时,Playwright 检查是否有其它元素(通常是覆盖)将捕获在 (10;10)
处的点击。
比如,考虑一种场景,不管何时进行 page.click(selector, **kwargs) 调用,Playwright 将点击 Sign Up
按钮:
Sign Up
按钮被禁用Sign Up
按钮被替换为另一个启用的按钮