Selenium 显式等待

Selenium 显式等待 WebDriverWait

一、为什么抛弃 time.sleep()

python 复制代码
time.sleep(3)

硬等待:强制卡死3秒,不管页面是否加载完成

缺点:

  1. 元素提前加载好了,依然要等 → 脚本运行慢
  2. 元素加载超过3秒 → 直接抛找不到元素异常

✅ 显式等待 WebDriverWait:循环判断元素条件,满足条件立刻放行;超过超时时间才报错。灵活高效,工作必用。

二、需要导入包

python 复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

三、标准模板(背诵!固定写法)

python 复制代码
# 参数1:driver对象;参数2:超时总时间(秒);参数3:轮询间隔(多久检查一次,默认0.5s)
wait = WebDriverWait(driver, 10, 0.5)

# until:直到满足条件
ele = wait.until(
    EC.presence_of_element_located( (By.XPATH, "//input[@id='kw']") )
)

⚠️ 注意:() 里面是元组,两个参数必须括号包起来!

四、常用 expected_conditions 条件(高频)

  1. presence_of_element_located:元素存在DOM中(html加载出来,不一定可见)
  2. visibility_of_element_located:元素可见(推荐大多数场景,能看到才能点击输入)
  3. element_to_be_clickable:元素可点击(按钮可用,无遮挡,优先用于按钮)
  4. text_to_be_present_in_element:元素文本包含指定内容

五、完整可运行示例(百度搜索)

python 复制代码
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

web_driver = webdriver.Edge(service=Service(r"D:\Software\edgedriver_win64\msedgedriver.exe"))
web_driver.get("https://www.baidu.com")
web_driver.maximize_window()

# 实例化等待对象,最长等待10秒
wait = WebDriverWait(web_driver, 10)

# 等待搜索框可见,找到元素
search_input = wait.until(
    EC.visibility_of_element_located( (By.ID, "kw") )
)
search_input.send_keys("显式等待学习")

# 等待按钮可点击
search_btn = wait.until(
    EC.element_to_be_clickable( (By.ID, "su") )
)
search_btn.click()

# 等待结果文本出现
wait.until(
    EC.text_to_be_present_in_element( (By.XPATH, "//h3"), "显式等待学习" )
)

web_driver.quit()

六、隐式等待(补充了解,不推荐混用)

python 复制代码
driver.implicitly_wait(10)

全局设置,整个会话生效;显式、隐式不要一起使用,容易出现奇怪超时bug,企业主流只用【显式等待】

七、常见报错

  1. TimeoutException:规定时间内,条件始终不满足
    排查:xpath写错 / 元素被遮挡 / 在iframe内 / 页面跳转没加载完成
  2. 忘记元组括号:EC.xxx(By.ID,"kw") ❌ → EC.xxx( (By.ID,"kw") ) ✅
相关推荐
Meta Luo16 小时前
页面改版后自动化用例大量失败,应该怎么维护?
运维·功能测试·测试工具·自动化
释槐鸟~1 天前
还不知道RIDE工具怎么装吗
测试工具·自动化
有技巧搬砖2 天前
为什么锂电池组的电池老化测试很重要?
测试工具·锂电池·电池老化
蒲公英内测分发2 天前
智能手表卖出去后,包装、说明书和官网里的 App 下载入口怎么统一?
前端·人工智能·测试工具·智能家居·智能硬件·智能手表
蒲公英内测分发2 天前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
无语的小歪歪2 天前
ATF 智测 1.0
python·测试工具·集成测试
SHENGWEI胜为3 天前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
xie881018023 天前
长表格跨页重复表头:排版上的做法
测试工具
老孟说禅3 天前
测试工具示波器的使用
测试工具
步行cgn4 天前
为什么使用接口测试工具?
测试工具