Python的web自动化学习(三)Selenium的显性、隐形等待

引言:

WebDriver的显性等待和隐形等待是用于在测试过程中等待元素加载或操作完成的两种等待方式。了解此两种方式是为后面自动化找到适合的方法去运用

显性等待(Explicit Wait)

显性等待是通过使用WebDriverWait类和ExpectedConditions类来实现的。它可以在测试中指定一个最长等待时间,并且在等待时间内不断轮询页面元素的状态,直到满足指定的条件。当条件满足或超过最长等待时间时,等待将结束,然后继续执行后续的测试步骤。

显性等待的使用步骤如下:

创建一个WebDriverWait对象,指定最长等待时间和轮询间隔时间。

使用ExpectedConditions类的方法来指定等待的条件,例如元素可见、元素存在、元素可点击等。

调用WebDriverWait对象的until()方法,传入指定的条件。

示例代码:

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

# 创建WebDriverWait对象,设置最长等待时间为60秒
wait = WebDriverWait(driver, 60)

# 等待元素可见
element = wait.until(EC.visibility_of_element_located((By.ID, 'element_id')))

隐形等待(Implicit Wait)

隐形等待是在创建WebDriver对象时设置的一个全局等待时间。它会在执行每个WebDriver操作时自动等待一段时间,如果元素在等待时间内找到,则立即执行操作,否则抛出NoSuchElementException异常。

隐形等待的使用方式如下:

python 复制代码
driver.implicitly_wait(10)  # 设置全局等待时间为10秒

显性等待和隐形等待都是用于等待元素加载或操作完成的等待方式,它们各自有以下优点:

python 复制代码
显性等待的优点:
1. 灵活性高:显性等待可以根据具体的等待条件来等待元素加载或操作完成,可以根据需要指定等待的条件,例如元素可见、元素存在、元素可点击等。
2. 等待时间可控:显性等待可以设置一个最长等待时间,可以确保在等待时间内完成等待,避免无限等待的情况发生。
3. 更精确的等待:显性等待可以根据需要等待特定的元素或条件,可以更精确地等待目标元素的加载或操作完成。

隐形等待的优点:
1. 简单易用:隐形等待只需要在创建WebDriver对象时设置一个全局等待时间,无需额外的代码和操作,非常简单易用。
2. 全局适用:隐形等待适用于整个测试过程中的普遍等待,可以自动应用于所有的WebDriver操作,减少了重复的等待代码。
3. 提高测试效率:隐形等待可以在等待时间内自动等待元素加载或操作完成,减少了手动等待的时间,提高了测试的效率。

总结:

显性等待和隐形等待都有各自的优点,显性等待更加灵活,可以根据具体需求指定等待条件和等待时间,适用于特定的等待场景;而隐形等待简单易用,可以全局适用于整个测试过程,提高了测试效率。根据具体的测试需求和场景,可以选择适合的等待方式来实现等待功能。

需要注意的是,显性等待和隐形等待可以同时使用,但是它们的等待时间不会叠加,而是取较大的那个等待时间。

总结:

显性等待是通过设置最长等待时间和指定条件来等待元素的加载或操作完成,更加灵活,适用于特定的等待场景;而隐形等待是在全局范围内设置一个等待时间,适用于整个测试过程中的普遍等待。根据具体的测试需求,可以选择使用显性等待、隐形等待或二者结合来实现等待功能。

相关推荐
weixin_462446233 分钟前
从零开始:基于 Python PyQt5 打造多功能音乐播放器 | 支持播放、暂停、进度控制与歌词同步
python·音乐播放器·pyqt5
小二·12 分钟前
Python Web 开发进阶实战:安全加固实战 —— 基于 OWASP Top 10 的全栈防御体系
前端·python·安全
唐叔在学习15 分钟前
还在申请云服务器来传输数据嘛?试试P2P直连吧
后端·python
黄宝康17 分钟前
sublimetext 运行python程序
开发语言·python
代码AI弗森17 分钟前
n8n 专题:从“自动化脚本”到“可视化工作流引擎”(自建、节点、Webhook、生产部署)
运维·自动化
week_泽24 分钟前
第5课:短期记忆与长期记忆原理 - 学习笔记_5
java·笔记·学习·ai agent
星期五不见面38 分钟前
机器人学习!(二)ROS-基于Gazebo项目(2)2026/01/12
学习·机器人
matlabgoodboy1 小时前
程序代做python代编程matlab定制代码编写C++代写plc设计java帮做
c++·python·matlab
Freshman小白1 小时前
《智能制造系统》网课答案
学习·答案·网课答案
副露のmagic1 小时前
更弱智的算法学习 day34
python·学习