自动等待
介绍
Playwright 在执行操作之前,会对元素进行一系列操作性检查,以确保这些操作按预期进行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果在给定的 timeout
内未通过所需的检查,则操作将失败并抛出 TimeoutError
。
例如,对于 Locator.ClickAsync(),Playwright 会确保
以下是为每个操作执行的操作性检查的完整列表
强制执行操作
某些操作,例如 Locator.ClickAsync(),支持 force
选项,该选项会禁用非必要的操作性检查,例如,向 Locator.ClickAsync() 方法传递真值 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 role。
接收事件
当元素是操作点处指针事件的命中目标时,它被认为是接收指针事件的。例如,当点击点 (10;10)
时,Playwright 会检查是否有其他元素(通常是覆盖层)会捕获在 (10;10)
处的点击。
例如,考虑一个场景,Playwright 会点击 Sign Up
按钮,无论 Locator.ClickAsync() 何时调用。
- 页面正在检查用户名是否唯一,且
Sign Up
按钮被禁用; - 与服务器检查后,被禁用的
Sign Up
按钮被另一个现在已启用的按钮替换。