自动等待
简介
Playwright在执行操作之前会对元素进行一系列可操作性检查,以确保这些操作按预期进行。它会自动等待所有相关检查通过后,才会执行请求的操作。如果在给定的timeout
内未通过必要的检查,操作将失败并抛出TimeoutError
错误。
例如,对于Locator.ClickAsync(),Playwright将确保:
以下是针对每个操作执行的可操作性检查的完整列表:
Action | Visible | Stable | Receives Events | Enabled | Editable |
---|---|---|---|---|---|
Locator.CheckAsync() | Yes | Yes | Yes | Yes | - |
Locator.ClickAsync() | Yes | Yes | Yes | Yes | - |
Locator.DblClickAsync() | Yes | Yes | Yes | Yes | - |
Locator.SetCheckedAsync() | Yes | Yes | Yes | Yes | - |
Locator.TapAsync() | Yes | Yes | Yes | Yes | - |
Locator.UncheckAsync() | Yes | Yes | Yes | Yes | - |
Locator.HoverAsync() | Yes | Yes | Yes | - | - |
Locator.DragToAsync() | Yes | Yes | Yes | - | - |
Locator.ScreenshotAsync() | Yes | Yes | - | - | - |
Locator.FillAsync() | Yes | - | - | Yes | Yes |
Locator.ClearAsync() | Yes | - | - | Yes | Yes |
Locator.SelectOptionAsync() | Yes | - | - | Yes | - |
Locator.SelectTextAsync() | Yes | - | - | - | - |
Locator.ScrollIntoViewIfNeededAsync() | - | Yes | - | - | - |
Locator.BlurAsync() | - | - | - | - | - |
Locator.DispatchEventAsync() | - | - | - | - | - |
Locator.FocusAsync() | - | - | - | - | - |
Locator.PressAsync() | - | - | - | - | - |
Locator.PressSequentiallyAsync() | - | - | - | - | - |
Locator.SetInputFilesAsync() | - | - | - | - | - |
强制操作
某些操作如Locator.ClickAsync()支持force
选项,该选项会禁用非必要的可操作性检查,例如向Locator.ClickAsync()方法传递真值force
时,将不会检查目标元素是否实际接收到了点击事件。
断言
Playwright包含自动重试断言功能,通过等待直到条件满足来消除不稳定性,类似于操作前的自动等待。
了解更多内容,请参阅断言指南。
可见
当元素具有非空边界框且没有计算样式visibility:hidden
时,该元素被视为可见。
请注意,根据这个定义:
- 尺寸为零的元素不会被视为可见。
- 带有
display:none
属性的元素不被视为可见。 - 带有
opacity:0
的元素会被视为可见。
稳定版
当元素在至少两个连续的动画帧中保持相同的边界框时,即被视为稳定。
已启用
当元素未被禁用时,被视为已启用。
元素在以下情况下会被禁用:
- 它是一个带有
[disabled]
属性的<button>
、<select>
、<input>
、<textarea>
、<option>
或<optgroup>
元素; - 它是一个
<button>
、<select>
、<input>
、<textarea>
、<option>
或<optgroup>
元素,并且属于带有[disabled]
属性的<fieldset>
的一部分; - 它是带有
[aria-disabled=true]
属性的元素的后代。
可编辑
当元素处于启用状态且非只读时,被视为可编辑。
元素在以下情况下是只读的:
- 它是一个带有
[readonly]
属性的<select>
、<input>
或<textarea>
元素; - 它具有
[aria-readonly=true]
属性和一个支持该属性的ARIA角色。
接收事件
当元素在操作点处成为指针事件的命中目标时,即被视为接收指针事件。例如,当点击(10;10)
点时,Playwright会检查是否有其他元素(通常是覆盖层)会在(10;10)
处捕获该点击。
例如,考虑这样一个场景:无论何时调用Locator.ClickAsync(),Playwright都会点击Sign Up
按钮:
- 页面正在检查用户名是否唯一,并且
Sign Up
按钮处于禁用状态; - 在与服务器验证后,禁用的
Sign Up
按钮被替换为另一个现在已启用的按钮。