自动等待
介绍
Playwright 在执行操作之前会对元素进行一系列可操作性检查,以确保这些操作按预期执行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果在给定的 timeout
内未通过所需检查,则操作将失败并出现 TimeoutError
。
例如,对于 Locator.ClickAsync(),Playwright 将确保
以下是每个操作执行的可操作性检查的完整列表
强制操作
某些操作(如 Locator.ClickAsync())支持 force
选项,该选项会禁用不必要的可操作性检查,例如将真值 force
传递给 Locator.ClickAsync() 方法将不会检查目标元素是否实际接收点击事件。
断言
Playwright 包含自动重试断言,通过等待条件满足来消除不稳定性,类似于操作之前的自动等待。
在 断言指南 中了解更多信息。
可见
当元素具有非空的边界框且没有 visibility:hidden
计算样式时,该元素被视为可见。
请注意,根据此定义
- 大小为零的元素 **不被** 视为可见。
- 具有
display:none
的元素 **不被** 视为可见。 - 具有
opacity:0
的元素 **被** 视为可见。
稳定
当元素至少在两个连续的动画帧中保持相同的边界框时,该元素被视为稳定。
已启用
除非元素是 <button>
、<select>
、<input>
或 <textarea>
且具有 disabled
属性,否则该元素被视为已启用。
可编辑
当元素是 已启用的 且未设置 readonly
属性时,该元素被视为可编辑。
接收事件
当元素是操作点处的指针事件的命中目标时,该元素被视为正在接收指针事件。例如,当在点 (10;10)
处点击时,Playwright 会检查是否某些其他元素(通常是覆盖层)将在 (10;10)
处捕获点击事件。
例如,考虑 Playwright 无论何时执行 Locator.ClickAsync() 调用都会点击 注册
按钮的场景
- 页面正在检查用户名是否唯一,并且
注册
按钮已禁用; - 检查完服务器后,禁用的
注册
按钮将被另一个现在已启用的按钮替换。