HoRain云--Selenium三大等待机制全解析

张开发
2026/4/3 13:45:57 15 分钟阅读
HoRain云--Selenium三大等待机制全解析
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍Selenium 等待机制详解一、强制等待Fixed Wait原理代码示例优缺点适用场景二、隐式等待Implicit Wait原理代码示例优缺点适用场景三、显式等待Explicit Wait原理代码示例常用条件优缺点适用场景四、最佳实践建议五、三种等待机制对比Selenium 等待机制详解在Selenium自动化测试中合理的等待机制是确保脚本稳定性的关键。根据搜索结果Selenium主要有三种等待机制强制等待、隐式等待和显式等待。下面详细介绍每种机制一、强制等待Fixed Wait原理使用time.sleep(seconds)函数让程序暂停执行一段固定的时间无论元素是否已经加载完成。代码示例import time from selenium import webdriver driver webdriver.Chrome() driver.get(https://www.baidu.com) # 强制等待3秒 time.sleep(3) search_box driver.find_element(By.ID, kw)优缺点优点简单直接易于理解缺点效率低无论元素是否加载完成都会等待固定时间可能导致测试时间过长适用场景临时调试已知需要固定等待时间的特殊场景二、隐式等待Implicit Wait原理给findElement操作添加全局重试机制。只在调用driver.findElement(...)时生效在超时时间内不断重试查找元素找到就返回找不到就一直试到超时抛异常。代码示例from selenium import webdriver driver webdriver.Chrome() # 设置隐式等待最长等待30秒 driver.implicitly_wait(30) driver.get(https://www.baidu.com) search_box driver.find_element(By.ID, kw) driver.quit()优缺点优点设置一次对整个driver生命周期有效简单易用缺点只能等待元素查找不能等待元素状态如可点击、可见等不能等待alert、URL变化等适用场景基础元素加载等待作为全局等待策略的补充三、显式等待Explicit Wait原理针对特定条件ExpectedCondition进行等待颗粒度细、可控性强。能等待元素状态、URL、文本、alert等多种条件。代码示例from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver webdriver.Chrome() driver.get(https://www.baidu.com) # 等待元素可见 wait WebDriverWait(driver, 10) # 最长等待10秒 search_box wait.until(EC.visibility_of_element_located((By.ID, kw))) # 等待元素可点击 submit_button wait.until(EC.element_to_be_clickable((By.ID, su))) # 等待URL包含特定字符串 wait.until(EC.url_contains(baidu.com))常用条件EC.visibility_of_element_located- 等待元素可见EC.element_to_be_clickable- 等待元素可点击EC.presence_of_element_located- 等待元素存在EC.text_to_be_present_in_element- 等待元素包含特定文本EC.alert_is_present- 等待alert出现EC.url_contains- 等待URL包含特定字符串优缺点优点精确控制等待条件可以等待各种状态是写稳定脚本的主力工具缺点需要为每个等待条件单独编写代码相对复杂适用场景AJAX加载内容动态渲染的元素需要精确控制等待条件的场景四、最佳实践建议优先使用显式等待在需要精确控制等待条件时显式等待是最可靠的选择合理设置隐式等待可以设置一个较短的全局隐式等待如5-10秒作为基础保障避免过度使用强制等待除非特殊场景否则尽量避免使用time.sleep组合使用在实际项目中通常会组合使用这三种等待机制等待时间设置根据网络环境和页面复杂度合理设置等待时间避免过长影响测试效率五、三种等待机制对比特性强制等待隐式等待显式等待等待对象固定时间元素查找特定条件作用范围局部全局局部精确度低中高适用场景调试、特殊场景基础元素加载动态内容、精确控制推荐程度★☆☆☆☆★★★☆☆★★★★★总结在Selenium自动化测试中显式等待是首选方案隐式等待可作为全局基础保障强制等待应尽量避免使用。合理组合这三种等待机制可以显著提高自动化脚本的稳定性和执行效率。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧

更多文章