自动等待
简介
Playwright 在执行动作之前会对元素进行一系列可操作性检查,以确保这些操作按预期执行。它会自动等待所有相关检查通过,然后才会执行请求的操作。如果在给定的 timeout
内相关检查没有通过,操作会失败并抛出 TimeoutError
。
例如,对于 locator.click(),Playwright 会确保:
-
定位符解析为准确的单一元素
-
元素是【可见的】
-
元素是【稳定的】,意味着它没有在动画中或动画完成
-
元素能够【接收事件】,意味着它没有被其他元素遮挡
-
元素是【启用的】
以下是每个操作所执行的完整可操作性检查列表:
操作 | 可见 | 稳定 | 接收事件 | 启用 | 可编辑 |
---|---|---|---|---|---|
locator.check() |
是 |
是 |
是 |
是 |
- |
locator.click() |
是 |
是 |
是 |
是 |
- |
locator.dblclick() |
是 |
是 |
是 |
是 |
- |
locator.setChecked() |
是 |
是 |
是 |
是 |
- |
locator.tap() |
是 |
是 |
是 |
是 |
- |
locator.uncheck() |
是 |
是 |
是 |
是 |
- |
locator.hover() |
是 |
是 |
是 |
- |
- |
locator.dragTo() |
是 |
是 |
是 |
- |
- |
locator.screenshot() |
是 |
是 |
- |
- |
- |
locator.fill() |
是 |
- |
- |
是 |
是 |
locator.clear() |
是 |
- |
- |
是 |
是 |
locator.selectOption() |
是 |
- |
- |
是 |
- |
locator.selectText() |
是 |
- |
- |
- |
- |
locator.scrollIntoViewIfNeeded() |
- |
是 |
- |
- |
- |
locator.blur() |
- |
- |
- |
- |
- |
locator.dispatchEvent() |
- |
- |
- |
- |
- |
locator.focus() |
- |
- |
- |
- |
- |
locator.press() |
- |
- |
- |
- |
- |
locator.pressSequentially() |
- |
- |
- |
- |
- |
locator.setInputFiles() |
- |
- |
- |
- |
- |
强制执行操作
某些操作(如 locator.click())支持 force
参数,能够禁用非必要的可操作性检查。例如,传递一个真值的 force
参数给 locator.click() 方法,会跳过检查目标元素是否能接收点击事件。
断言
Playwright 包括自动重试的断言,可以通过等待直到条件满足,减少不稳定性,类似于操作之前的自动等待。
断言 | 描述 |
---|---|
expect(locator).toBeAttached() |
元素已附加 |
expect(locator).toBeChecked() |
复选框已选中 |
expect(locator).toBeDisabled() |
元素被禁用 |
expect(locator).toBeEditable() |
元素可编辑 |
expect(locator).toBeEmpty() |
容器为空 |
expect(locator).toBeEnabled() |
元素启用 |
expect(locator).toBeFocused() |
元素获得焦点 |
expect(locator).toBeHidden() |
元素不可见 |
expect(locator).toBeInViewport() |
元素与视口有交集 |
expect(locator).toBeVisible() |
元素可见 |
expect(locator).toContainText() |
元素包含指定文本 |
expect(locator).toHaveAttribute() |
元素具有指定的 DOM 属性 |
expect(locator).toHaveClass() |
元素具有指定的类属性 |
expect(locator).toHaveCount() |
列表具有精确数量的子元素 |
expect(locator).toHaveCSS() |
元素具有指定的 CSS 属性 |
expect(locator).toHaveId() |
元素具有指定的 ID |
expect(locator).toHaveJSProperty() |
元素具有指定的 JavaScript 属性 |
expect(locator).toHaveText() |
元素匹配指定的文本 |
expect(locator).toHaveValue() |
输入框具有指定的值 |
expect(locator).toHaveValues() |
选择框具有选中的选项 |
expect(page).toHaveTitle() |
页面具有指定的标题 |
expect(page).toHaveURL() |
页面具有指定的 URL |
expect(response).toBeOK() |
响应状态为 OK |
更多内容请参阅 【断言指南】。