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. 提高测试效率:隐形等待可以在等待时间内自动等待元素加载或操作完成,减少了手动等待的时间,提高了测试的效率。

总结:

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

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

总结:

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

相关推荐
Circ.几秒前
wsl部署deerflow实现调用自定义的skill(demo级别调用)
python·大模型·deerflow
郝学胜-神的一滴2 分钟前
PyTorch张量维度操控:transpose与permute深度拆解与实战指南
人工智能·pytorch·python·深度学习·算法·机器学习
小邓的技术笔记8 分钟前
Python 入门:从“其他语言”到 Pythonic 思维的完整迁移手册
开发语言·python
北冥有羽Victoria9 分钟前
Django 实战:SQLite 转 MySQL 与 Bootstrap 集成
大数据·服务器·python·django·编辑器
忘忧记9 分钟前
Pytest + Requests + YAML 数据驱动+日志模块
网络·python·pytest
艾莉丝努力练剑10 分钟前
【Linux线程】Linux系统多线程(二):线程的优缺点
linux·运维·服务器·c++·学习
AI自动化工坊10 分钟前
微软Agent Framework实战指南:统一Python和.NET的AI开发体验
人工智能·python·microsoft·.net·agent
林姜泽樾13 分钟前
Python爬虫基础第一章,JSON
爬虫·python·网络爬虫
艾莉丝努力练剑16 分钟前
【Linux线程】Linux系统多线程(一):线程概念
java·linux·运维·服务器·开发语言·学习·线程
嵌入式小企鹅19 分钟前
Claude开源风暴?半导体设备突破?
大数据·人工智能·学习·开源·嵌入式·半导体·ai芯片