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") ) ✅
相关推荐
ZhangJun9521 小时前
从零写一个类鲁大师的硬件检测小工具,软件附上,可直接使用
windows·测试工具·电脑·笔记本电脑·硬件架构
测试员周周2 天前
【jev应用到测试】94 条 UI 报错交给 Jev,三档判对 85.1%,开单闸门定在 0.6
人工智能·python·测试工具·单元测试·测试用例
xfilm埃利测量2 天前
从方阻到电阻率:四探针法如何把薄膜“测明白“
功能测试·测试工具·四探针·薄膜电阻测量
禹凕3 天前
机器学习之Selenium(Machina Learning about Selenium)
爬虫·python·selenium·测试工具·机器学习
水水不水啊5 天前
告别杂乱的调试窗口:我用 Python + WebView 写了一个现代化串口助手
python·测试工具·嵌入式·嵌入式开发·串口调试·串口助手
把头塞进显示器11 天前
电商平台-测试报告
python·selenium·pytest
霍格沃兹测试学院-小舟畅学12 天前
UI 测试的语义断言:Midscene aiAssert 比像素比对稳在哪、又会骗在哪
人工智能·测试工具
zuozewei12 天前
附录 A:主流工具对比选型表
人工智能·测试工具
我的xiaodoujiao12 天前
Django 基础知识详细图文教程 10-Django 模板引擎 3
后端·python·测试工具·django
霍格沃兹测试学院-小舟畅学12 天前
Google 开源 ARTEMIS:AI Agent 如何接管 Android 真机测试?
人工智能·测试工具