自动等待
说明
Playwright 会在执行操作前对元素进行一系列可操作性检查,以确保这些操作能按预期进行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果在给定的 timeout
内所需的检查未通过,则操作将失败并抛出 TimeoutError
。
例如,对于 locator.click(),Playwright 将确保:
- 定位器只解析到一个元素
- 元素是[可见的]
- 元素是[稳定的],即没有动画或动画已结束
- 元素[接收事件],即不被其他元素遮挡
- 元素是[可用的]
以下是每种操作执行的可操作性检查完整列表:
强制执行操作
某些操作如 locator.click() 支持 force
选项,可以禁用非必要的可操作性检查。例如,向 locator.click() 方法传递为真值的 force
将不会检查目标元素是否实际接收点击事件。
断言
Playwright 包含了具有自动重试功能的断言,它通过等待直到条件满足来消除测试波动,与操作前的自动等待机制类似。
更多内容请参阅 断言指南。
可见
当元素有非空边界框且计算样式中没有 visibility:hidden
时,该元素被视为可见。
请注意根据此定义:
- 零大小的元素不视为可见。
- 设置了
display:none
的元素不视为可见。 - 设置了
opacity:0
的元素是可视的。
稳定
当元素至少维持两个连续动画帧相同的边界框时,该元素被视为稳定。
可用
当元素未被禁用时,该元素被视为可用。
元素在以下情况下被视为不可用:
- 它是一个带有
[disabled]
属性的<button>
、<select>
、<input>
、<textarea>
、<option>
或<optgroup>
; - 它是一个位于带有
[disabled]
属性的<fieldset>
中的<button>
、<select>
、<input>
、<textarea>
、<option>
或<optgroup>
; - 它是带有
[aria-disabled=true]
属性的元素的后代。
可编辑
当元素是[可用]的并且不是只读的,该元素被视为可编辑。
元素在以下情况下被视为只读:
- 它是一个带有
[readonly]
属性的<select>
、<input>
或<textarea>
; - 它有一个
[aria-readonly=true]
属性和一个支持它的 ARIA 角色。
接收事件
当某个元素是在指定动作点接收指针事件的目标时,该元素被认为接收事件。例如,当点击 (10;10)
这个点时,Playwright 会检查是否有其他元素(通常是覆盖层)将在 (10;10)
接收点击。
例如,考虑这样一个场景:无论何时调用 locator.click(),Playwright 都会点击 注册
按钮:
- 页面正在检查用户名是否唯一,此时
注册
按钮被禁用; - 与服务器核对后,禁用的
注册
按钮被替换为新的可用按钮。