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") )
相关推荐
Tinyfacture20 小时前
postman抓取登录鉴权码token及设置全局变量
测试工具·postman
川石课堂软件测试1 天前
涨薪技术|Prometheus之HTTP API中使用PromQL
网络协议·测试工具·jmeter·http·单元测试·postman·prometheus
x10n92 天前
Postman 汉化完整指南
测试工具·lua·postman
2601_962295333 天前
如何python实现网页的自动化
python·selenium·beautifulsoup·requests·网页自动化
Luminbox紫创测控3 天前
一文读懂:准直太阳模拟器如何检测汽车AR-HUD阳光倒灌
测试工具·汽车·ar·安全性测试·太阳光模拟器·测试标准·阳光倒灌
程序员小远3 天前
自动化测试用例编写实例详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
云雀衔光3 天前
Java Spring AI MCP:在 Spring 里把 AI 接上你的业务系统
java·开发语言·人工智能·后端·测试工具·spring
云雀衔光3 天前
MCP + 应用生成:让 AI 直接产出可交互的应用
java·人工智能·测试工具·microsoft·交互·ai编程