5月27日 21:16
Appium 的等待机制有哪些?
三种等待机制
Appium 继承了 Selenium WebDriver 的等待体系,核心有三种:
隐式等待 — 全局生效,设置一次后所有 find_element 自动等待。只对元素查找有效,对点击、输入等操作无效。
pythondriver.implicitly_wait(10) # 全局等待10秒
显式等待 — 针对特定条件等待,是实际项目中最常用的方式。默认每 0.5 秒轮询一次,条件满足立即继续执行。
pythonfrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "submit")) )
强制等待 — time.sleep() 固定阻塞,仅在必须等固定时间的场景使用(如数据推送、短间隔操作),正常测试中应避免。
隐式等待 vs 显式等待
| 隐式等待 | 显式等待 | |
|---|---|---|
| 作用范围 | 全局所有 find 操作 | 单个元素或条件 |
| 能否判断元素状态 | 不能,只判断是否存在 | 能,可判断可见、可点击等 |
| 灵活性 | 低 | 高,支持自定义条件 |
实际项目中两者不要混用。混用会导致等待时间不可预测,官方也不推荐。通常选一种即可,优先显式等待。
面试怎么答
先说结论:Appium 有三种等待——隐式、显式、强制等待,实际项目优先用显式等待。
再展开:隐式等待全局生效但只能判断元素存在,显式等待灵活精确可判断元素状态,强制等待只在特殊场景使用。关键是两者不要混用。
追问
- 隐式等待和显式等待同时设置会怎样?— 等待时间叠加,行为不可预测,应避免混用
- 显式等待的轮询间隔能改吗?— 能,
WebDriverWait(driver, 10, poll_frequency=1)第三个参数 - 页面加载超时怎么设置?—
driver.set_page_load_timeout(30)