Python Selenium中的强大等待设置详解

更多资料获取

📚 个人网站:ipengtao.com


在Web自动化测试中,等待是至关重要的一环,而Selenium提供了丰富的等待设置来确保测试脚本的可靠性和稳定性。本文将深入研究Python Selenium中常用的必备等待设置,包括显式等待、隐式等待、自定义等待条件等多个方面。通过详实的示例代码,将为大家提供全面而深入的学习体验。

显式等待

显式等待是在特定条件下等待某个元素的出现或者消失。以下是一个等待元素可点击的示例:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 显式等待
element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, 'example_id'))
)

element.click()

隐式等待

隐式等待是在整个会话中等待元素出现的最长时间。设置一次即可,全局生效:

from selenium import webdriver

# 隐式等待
driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.get('https://example.com')
element = driver.find_element(By.ID, 'example_id')

自定义等待条件

有时候我们需要根据自定义的条件等待,可以使用expected_conditions中的expected_conditions类:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 自定义等待条件
class ElementHasText:
    def __init__(self, locator, text_):
        self.locator = locator
        self.text = text_

    def __call__(self, driver):
        element_text = EC._find_element(driver, self.locator).text
        return self.text in element_text

element_locator = (By.ID, 'example_id')
wait = WebDriverWait(driver, 10)
wait.until(ElementHasText(element_locator, 'Expected Text'))

多重等待条件

有时我们需要等待多个条件同时满足,可以使用expected_conditions中的and_or_

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 多重等待条件
element_locator = (By.ID, 'example_id')
wait = WebDriverWait(driver, 10)
wait.until(EC.and_(
    EC.element_to_be_clickable(element_locator),
    EC.visibility_of_element_located(element_locator)
))

页面加载状态的等待

在Web自动化测试中,页面的加载状态是一个关键考量因素。Selenium提供了expected_conditions中的document_to_be_ready_state来等待页面加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 页面加载状态的等待
wait = WebDriverWait(driver, 10)
wait.until(EC.document_to_be_ready_state('complete'))

元素存在与可见性等待

除了常规的元素等待,有时还需要等待元素的出现或者可见性。以下是一个等待元素存在并可见的示例:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 元素存在与可见性等待
element_locator = (By.ID, 'example_id')
wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located(element_locator))

Fluent等待

Fluent等待允许在等待期间设置轮询条件,增加了等待的灵活性。以下是一个Fluent等待的示例:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import FluentWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

# Fluent等待
wait = WebDriverWait(driver, 10)
element = FluentWait(driver, timeout=10, poll_frequency=1, ignored_exceptions=[TimeoutException]) \
    .until(lambda x: x.find_element(By.ID, 'example_id'))

异步JavaScript加载的等待

对于异步JavaScript加载的元素,可以使用expected_conditions中的invisibility_of_element_located来等待其加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 异步JavaScript加载的等待
element_locator = (By.ID, 'async_element')
wait = WebDriverWait(driver, 10)
wait.until(EC.invisibility_of_element_located(element_locator))

总结

在本篇文章中,全面深入地探讨了Python Selenium中常用的必备等待设置,旨在为Web自动化测试提供更为全面和深入的学习体验。通过详实的示例代码,深入介绍了显式等待、隐式等待、自定义等待条件、多重等待条件、页面加载状态的等待、元素存在与可见性等待、Fluent等待以及异步JavaScript加载的等待。这些等待设置不仅仅是简单的时间延迟,更是在确保脚本执行的可靠性和稳定性方面的必备工具。

通过显式等待,能够精确等待某个特定条件的出现或消失,提高了脚本的精准性。隐式等待为整个会话提供了最长等待时间,全局有效,确保了在查找元素时的超时容忍度。自定义等待条件和多重等待条件则进一步增强了等待的灵活性,适应了更多复杂的测试场景。还深入研究了页面加载状态的等待,元素存在与可见性等待,Fluent等待以及异步JavaScript加载的等待,涵盖了更广泛的测试需求。这些等待设置的巧妙应用,可以在处理异步加载、提高页面加载的稳定性等方面展现出强大的效果。

总体而言,本文为大家提供一个全方位的学习路径,使其能够更好地理解和运用Python Selenium中各种等待设置。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/263515.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023.12.19 关于 Redis 通用全局命令

目录 引言 Redis 全局命令 SET & GET KEYS EXISTS DEL EXPIRE TTL TYPE redis 引入定时器高效处理过期 key 基于优先级队列方式 基于时间轮方式 引言 Redis 是根据键值对的方式存储数据的必须要进入 redis-cli 客户端程序 才能输入 redis 命令 Redis 全局命令 R…

antdv中的slider组件会默认将min值传递给value

如果是使用响应式变量,会将min的值传递到v-model对应的变量里

VPN理论入门及GRE、L2TP、IPsec(HCIP)

一、VPN概述 IPsec-VPN: 1、应用范围:用于分公司和总部之间。 2、作用:机密性、证书(身份认证) VPN概述 VPN概述:VPN(Virtual Private Network)是指依靠Internet服务提供商ISP&a…

【深度学习】序列生成模型(六):评价方法计算实例:计算ROUGE-N得分【理论到程序】

文章目录 一、BLEU-N得分(Bilingual Evaluation Understudy)二、ROUGE-N得分(Recall-Oriented Understudy for Gisting Evaluation)1. 定义2. 计算N1N2 3. 程序 给定一个生成序列“The cat sat on the mat”和两个参考序列“The c…

CSS-计数器 counter-reset、counter-increment、counter-reset

计数器 CSS的计数器通过在 content 上应用 counter() 或 counters()函数来显示计数的。其中计数器是由counter-reset和counter-increment 来进行操作的。 counter-increment 语法 counter-increment参数1:计算器名称 该标识符由不区分大小写的字母 a 到 z&#xf…

Ubuntu 常用命令之 top 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 top命令是Linux下常用的性能分析工具,可以实时动态地查看系统中各个进程的资源占用状况,类似于Windows的任务管理器。它可以显示系统总的和分区的CPU使用率、内存使用率、交换区使用率、系统负载、进程数、…

微搭低代码密码加密存储

目录 1 加密密码2 密码存入用户表中总结 我们在用户登录注册部分,给出了用户注册的例子。但是有一个问题,密码是在数据库中明文存储的,很容易就被破解。为了提高登录的安全性,我们本次讲解一下如何解决密码的加密存储。 1 加密密码…

FISCO BCOS(十六)多机部署及相关操作

多机部署通常指的是在多台计算机或虚拟机之间搭建一个联合系统,以实现分布式计算或服务的目的。这可以提高系统的可靠性、性能和扩展性。确保虚拟机之间能够互相通信,可以使用静态IP或者动态分配IP的方式,接下来一步步带大家进行操作搭建一条…

限量25台,川崎亮相Ninja ZX-10RR冬季限量款

最近川崎发布了自家ZX-10RR的超级限量版,官方称之为冬季测试版,之前也有一些车型推出过冬季测试版,通常是在年底推出,因为这个时候北半球都是非常寒冷的冬天。 不过这台ZX-10RR冬季测试版,并不仅仅只是限量那么简单&am…

前后端分离下的鸿鹄电子招投标系统:使用Spring Boot、Mybatis、Redis和Layui实现源码与立项流程

在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…

Ubuntu 常用命令之 df 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 在Ubuntu系统下,df命令是用来查看文件系统的磁盘空间占用情况的。df是disk free的缩写,这个命令可以获取硬盘被占用了多少空间,还有多少空间是可用的,硬盘的挂载点等信息。 df命令的…

AI中的强化学习是怎么做的呢?

1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报。在很多场景中,当前的行动不仅会影响当前的rewar…

Peter算法小课堂—贪心与二分

太戈编程655题 题目描述: 有n辆车大甩卖,第i辆车售价a[i]元。有m个人带着现金来申请购买,第i个到现场的人带的现金为b[i]元,只能买价格不超过其现金额的车子。你是大卖场总经理,希望将车和买家尽量多地进行一对一配对…

亚马逊推出 Graviton4:具有 536.7 GBps 内存带宽的 96 核 ARM CPU

如今,许多云服务提供商都设计自己的芯片,但亚马逊网络服务 (AWS) 开始领先于竞争对手,目前其子公司 Annapurna Labs 开发的处理器可以与 AMD 和英特尔的处理器竞争。本周,AWS 推出了 Graviton4 SoC,这是一款基于 ARM 的…

通过生成表征的自条件图像生成

文章目录 摘要1、简介2、相关工作3、方法4、结果4.1、设置4.2、无条件类别的生成4.3、无分类器指导4.4、消融实验4.5、计算成本4.6、定性结果 5、讨论 摘要 https://arxiv.org/pdf/2312.03701.pdf 本文提出了表示条件图像生成(Representation-Conditioned Image Ge…

【前缀和】【单调栈】LeetCode2281:巫师的总力量和

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 作为国王的统治者,你有一支巫师军队听你指挥。 给你一个下标从 0 开始的整数数组 strength &…

LIGA-Stereo:为基于立体 3D 检测器的学习 LiDAR 几何感知表示

论文地址:https://openaccess.thecvf.com/content/ICCV2021/papers/Guo_LIGA-Stereo_Learning_LiDAR_Geometry_Aware_Representations_for_Stereo-Based_3D_Detector_ICCV_2021_paper.pdf 论文代码:https://github.com/xy-guo/LIGA-Stereo 摘要 基于立…

基于MybatisPlus批量高效插入百万条数据

引言 在JAVA程序开发中,对数据库进行大量数据插入是一个常见的操作,作为一个软件开发工程师,大批量的数据处理是日常工作,如何优化插入性能,提升数据处理效率是对大多数工程师的一个重要考验。本文将围绕逐条插入和批…