Skip to main content

自动等待

Playwright 在执行操作之前对元素执行一系列可操作性检查,以确保这些操作按预期进行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果所需的检查在给定的 timeout 内未通过,则操作将失败并显示 TimeoutError

例如,对于 page.click(selector, **kwargs),Playwright 将确保:

  • 元素已 [连接] 到 DOM
  • 元素是 [可见]
  • 元素是 [稳定] 的,即没有动画或动画已完成
  • 元素 [接收事件],即未被其他元素遮挡
  • 元素已 [启用]

以下是对每个操作执行的可操作性检查的完整列表:

ActionAttachedVisibleStableReceives EventsEnabledEditable
checkYesYesYesYesYes-
clickYesYesYesYesYes-
dblclickYesYesYesYesYes-
setCheckedYesYesYesYesYes-
tapYesYesYesYesYes-
uncheckYesYesYesYesYes-
hoverYesYesYesYes--
scrollIntoViewIfNeededYes-Yes---
screenshotYesYesYes---
fillYesYes--YesYes
selectTextYesYes----
dispatchEventYes-----
focusYes-----
getAttributeYes-----
innerTextYes-----
innerHTMLYes-----
pressYes-----
setInputFilesYes-----
selectOptionYesYes--Yes-
textContentYes-----
typeYes-----

Forcing actions

某些操作(如 page.click(selector, **kwargs))支持 force 选项,该选项可禁用非必要的可操作性检查,例如将真值 force 传递给 page.click(selector, **kwargs) 方法将不会检查目标元素是否实际接收单击事件。

Assertions

您也可以使用以下方法之一检查元素的可操作性状态。这通常不是必需的,但它有助于编写断言测试,以确保在某些操作之后,元素达到可操作状态:


Attached

当元素 连接 到 Document 或 ShadowRoot 时,该元素被视为已连接。

Visible

当元素具有非空边界框且没有 visibility:hidden 计算样式时,该元素被视为可见。请注意,零大小或具有 display:none 的元素不被视为可见。

Stable

当元素在至少两个连续的动画帧中保持相同的边界框时,该元素被视为稳定。

Enabled

除非元素是具有 disabled 属性的 <button><select><input><textarea>,否则该元素被视为已启用。

Editable

当元素 [已启用] 且未设置 readonly 属性时,该元素被视为可编辑。

Receives Events

当元素是操作点处指针事件的命中目标时,该元素被视为接收指针事件。例如,当在点 (10;10) 处单击时,Playwright 会检查是否有其他元素(通常是覆盖层)会在 (10;10) 处捕获单击。

例如,考虑这样一种情况:无论何时调用 page.click(selector, **kwargs),Playwright 都会单击 Sign Up 按钮:

  • 页面正在检查用户名是否唯一,并且 Sign Up 按钮已禁用;
  • 在与服务器核对后,禁用的 Sign Up 按钮被另一个现已启用的按钮替换。