等待策略是什么
等待策略分三类:显式等待针对指定条件轮询(如元素可点击)、隐式等待影响所有元素查找、自动等待由框架在动作前自行同步(如 Playwright)。选型原则是「等待条件」而不是「等待时间」;混用多种等待会引入不可预测的等待叠加,反而让超时行为更难解释。
基本信息
| 显式等待 | WebDriverWait 配合 expected_conditions,单条件精确控制 |
|---|---|
| 隐式等待 | driver.implicitly_wait 全局生效,作用于所有查找 |
| 自动等待 | Playwright 等框架在动作前自动同步 |
| 风险组合 | 隐式与显式混用,等待时长不可预测 |
| 原则 | 等条件(可见、可点击、网络空闲),不等固定秒数 |
等待类型
| 类型 | 控制粒度 | 风险 |
|---|---|---|
| 显式等待 | 单条件精确控制 | 条件写得不当会提前通过 |
| 隐式等待 | driver 全局生效 | 与显式等待混用造成时长不可预测 |
| 自动等待 | 框架在动作前自动同步 | 依赖框架,迁移时需重新评估 |
显式等待示例
显式等待示例
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等条件而不是等时间
WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "submit"))
)
driver.find_element(By.ID, "submit").click()典型使用场景
- 异步页面:等元素可见、可点击、文本出现再操作。
- 接口回包:等网络空闲或特定响应后再断言界面。
- 框架迁移:从 Selenium 迁到自动等待框架时重审全部等待。
- 稳定性治理:把 sleep 换成条件等待,缩短耗时并降低误报。
- 超时设计:等待上限与用例超时统一规划,失败信息可读。
- 评审把关:等待写法进检查清单,杜绝新增固定睡眠。
Selenium 官方文档提示:隐式等待与显式等待混用会造成难以预测的等待时长。
等待失败要输出上下文:超时时记录当前 URL、页面片段与等待条件,排错才有方向。
在自动等待框架内叠加 sleep 与手动轮询,会屏蔽框架自身的诊断信息。