selenium三大等待

目录

前言:

一、强制等待:sleep(秒)

二、智能等待:显性等待

三、智能等待:隐形等待


前言:

在Selenium自动化测试中,等待是非常重要的一部分,它能够确保在需要时等待页面或元素的加载完成或状态的改变。

使用场景:有时候当我们操作页面元素时,需要等待这个过程才能操作成功。

做Ui自动化的时候,考虑到稳定性:多次运行同一脚本,都能够保证它是成功的。

一、强制等待:sleep(秒)

比如sleep(10),就必须等待10秒,才能执行下一步。 简单粗暴,不过代码将会有很多sleep,冗余度会提高。

二、智能等待:显性等待
 

专门针对特定元素而设置的等待,在规定的时间内找到元素,找到了就执行下一步,
没有找到抛出异常(TimeoutException)。效率高,可以自定义条件。
from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until(条件)
WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until_not(条件)
selenium3当中,每一个条件是以类的形式实现的。每一个类都有__init__, __call__
selenium4当中,每一个条件是以函数的形式实现的。每一个函数都有一个_predicate内部函数。闭包
使用显性等待的时候,先确定你的条件是什么。然后再去使用显性等待。
等待效果只有一次,不像隐性等待全局可用。
比较多的用法:显性等待 + 短暂的sleep
常用的条件:
visibility_of_element_located(locator)  --- locator对应的元素是可见的
element_to_be_clickable(mark) --- mark对应的元素可点击

三、智能等待:隐形等待

调用find_element/find_elements方法的时候,如果元素没找到不会立马报错,
会主动使用隐性等待,达到最大等待时间后,抛出异常。
一个会话(浏览器打开到关闭这个过程)当中,只需要调用一次,全局可用。
没有办法对精准度的元素进行定位,会影响实际的运行效率。
三种方法一起使用代码如下:
 1 import time2 from selenium import webdriver3 from selenium.webdriver.support.wait import WebDriverWait4 from selenium.webdriver.support import expected_conditions as EC5 6 driver = webdriver.Chrome()7 driver.get("https://www.baidu.com")8 #隐形等待9 driver.implicitly_wait(10)
10 driver.maximize_window()
11 # 显性等待
12 #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
13 el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
14 el.click()
15 # 强制等待
16 time.sleep(3)
17 driver.quit()
显示等待结合预期条件判断代码如下:
 1 import time2 from selenium import webdriver3 from selenium.webdriver.support.wait import WebDriverWait4 from selenium.webdriver.support import expected_conditions as EC5 6 # driver = webdriver.Chrome()7 # driver.get("https://www.baidu.com")8 # #隐形等待9 # driver.implicitly_wait(10)
10 # driver.maximize_window()
11 # # 显性等待
12 # #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
13 # el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
14 # el.click()
15 # # 强制等待
16 # time.sleep(3)
17 # driver.quit()
18 #
19 driver = webdriver.Chrome()
20 driver.maximize_window()
21 driver.get("https://www.baidu.com")
22 
23 locator = ('xpath','//a[text()="新闻"]')
24 # WebDriverWait()一般与 until()或 until_not()方法配合使用
25 # until(),直到返回值为 True。
26 # until_not(),直到返回值为 Flase。
27 # 判断元素是否可见
28 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可见,如果超过设置时间仍检测不到,则抛出异常。
29 WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator),message="元素可见")
30 # 判断元素是否可以点击
31 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可点击,如果超过设置时间仍检测不到,则抛出异常。
32 WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable(locator))
33 # 判断元素是否存在
34 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。
35 WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))
36 driver.find_element(*locator).click()
37 # 判断标题是否不存在
38 # 在设置时间内,默认每隔一段时间检测一次标题是否不存在,如果超过设置时间仍检测不到,则抛出异常。
39 WebDriverWait(driver,5,0.5).until_not(EC.title_is("123123"),message="标题不是这个")
40 time.sleep(3)
41 driver.quit()

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Grafana嵌入iframe,websoket连接报错400或403(nginx代理)

1、custom.ini配置文件修改allowed_origins* 2、 nginx中增加配置,如下:

网络犯罪分子在新的代理劫持活动中劫持脆弱的SSH服务器

一个活跃的金融活动针对的是脆弱的SSH服务器,以隐蔽地将它们纳入一个代理网络。 "Akamai研究员Allen West在周四的一份报告中说:"这是一个活跃的活动,攻击者利用SSH进行远程访问,运行恶意脚本,隐蔽地将受害…

【AI底层逻辑】——篇章3(下):信息交换信息加密解密信息中的噪声

续:【AI底层逻辑】——篇章3(上):数据、信息与知识&香农信息论&信息熵 目录 三、信息是如何交换的 1、互联网与信息交换 2、哈夫曼和有效编码 四、信息的加密与解密 1、密码学的发展 2、可以被公开的密钥 五、信息…

sql server 触发器往链接服务器同步数据的坑

链接服务器无法启动分布式服务 检查数据库是否勾选了一下按钮,双方都要检查 链接服务器属性,需要检查这些地方是否已经设置为true 该伙伴事务管理器已经禁止了它对远程/网络事务的支持 双方启动MSDTC服务 (1)在windows控制面版–>windows 工具->…

Elasticsearch 集群日志收集搭建

Elasticsearch-7.2.0Logstash-7.2.0Kibana-7.2.0-Filebeat-7.6.0 第一台集群内网ip:10.0.0.223 ES配置文件:/es_data/es/elasticsearch-7.2.0/config/elasticsearch.yml ES启动命令:/es_data/es/elasticsearch-7.2.0/bin/elasticsearch cl…

elasticsearch7.17.3实现按terms传入内容排序,类似mysql中order by filed()的排序方式

现有一个需求,需要在elasticsearch中实现用terms筛选内容,并且按terms传入的内容顺序排列 类型于mysql中order by filed()的排序方式,具体实现如下 目录 一、需求二、整体思路三、es查询语句四、java生成es连接五、java调用es六、最终实现结果…

linux上虚拟机vmware-workstation离线安装详细教程

linux上虚拟机vmware-workstation详细教程 一、VMWare基本介绍二、VMWare下载2.1 查看本地系统信息2.2 选择及下载合适的版本 三、VMWare安装3.1 安装依赖库3.2 vmware安装3.3 验证安装3.4 异常及解决方案3.4.1 Failed to start SYSV3.4.2 GLib does not have GSettings suppor…

Nacos架构与原理 - Nacos-Sync

文章目录 概述官网系统模块架构同步任务管理页面注册中心管理页面使用场景 概述 NacosSync 是⼀个支持多种注册中心的同步组件,基于 Spring boot 开发框架,数据层采用Spring Data JPA ,遵循了标准的 JPA 访问规范,支持多种数据源存储,默认使用Hibernate…

用于语义图像分割的弱监督和半监督学习:弱监督期望最大化方法

这时一篇2015年的论文,但是他却是最早提出在语义分割中使用弱监督和半监督的方法,SAM的火爆证明了弱监督和半监督的学习方法也可以用在分割上。 这篇论文只有图像级标签或边界框标签作为弱/半监督学习的输入。使用期望最大化(EM)方法,用于弱…

qt Qss 边框渐变

目录 背景渐变 方案一 Qss 方案二 paintEvent函数 方案三 QGraphicsDropShadowEffect投影效果 背景渐变 QT里面背景是可以渐变,其中qlineargradient里面参数意思 spread:渐变方式(具体可以查看qt帮助文档搜索PadSpread) 坐…

走进人工智能|机器学习 解码未来的科技革命

前言: 机器学习的发展为我们提供了更智能、高效和便捷的科技产品和服务,可以改善我们的生活和工作方式。 文章目录 序言背景解码未来的科技革命技术支持应用领域程序员如何学总结 序言 机器学习是一种人工智能领域的技术,它让计算机通过数据自动地学习和…

SpringBoot 整合redis + Aop防止重复提交 (简易)

1.redis的安装 redis下载 解压 安装 # wget http://download.redis.io/releases/redis-6.0.8.tar.gz # tar xzf redis-6.0.8.tar.gz # cd redis-6.0.8 # make 看一下就会有 进入redis-6.0.8下的src目录 [rootVM-16-8-centos redis]# cd redis-6.0.8 [rootVM-16-8-centos re…