selenium三大等待

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

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

一、强制等待:sleep(秒)

比如sleep(10),就必须等待10秒,才能执行下一步。

简单粗暴,不过代码将会有很多sleep,冗余度会提高。

在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

软件测试视频教程观看处:

2023完整版阿里大牛7天软件测试零基础速成内部教程,从基础到项目实战学完即入职。

二、智能等待:显性等待

专门针对特定元素而设置的等待,在规定的时间内找到元素,找到了就执行下一步, 没有找到抛出异常(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 time
 2 from selenium import webdriver
 3 from selenium.webdriver.support.wait import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 
 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 time
 2 from selenium import webdriver
 3 from selenium.webdriver.support.wait import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 
 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()

四、总结

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

 

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

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

相关文章

一键批量转码:将MP4视频转为MP3音频的简单方法

随着数字媒体设备的普及,视频和音频格式转换的需求也越来越常见。其中,将MP4视频批量转换为MP3音频的需求尤为普遍。无论是为了提取视频中的背景音乐,还是为了在手机或电脑上方便地收听视频音频,这个过程都变得非常重要。接下来我…

opencv创建图片,绘制图片,画框,划线,改变像素点颜色

文章目录 创建空白图片创建一张渐变色彩色绘制多边形绘制多线改变像素点颜色 创建空白图片 bool tool_class::creatEmpty(int width, int height, std::string image_p) {// 创建一个空白图像cv::Mat blankImage(height, width, CV_8UC3, cv::Scalar(255, 255, 255));// 保存图…

蓝牙运动耳机哪个好?这几款蓝牙运动耳机不容错过!

音乐能有效地激发人体潜能,充分释放能量,达到更好的运动效果,因此对于运动爱好者来说,一款合适的运动蓝牙耳机至关重要,面对产品种类众多的运动耳机,很多人都会感到迷茫,经常有人问“有什么适合…

移位操作符 位操作符详解

hello hello&#xff0c;想我了吗? &#x1f604;&#x1f604;&#x1f604; 首先是移位操作符&#xff1a;<< 左移操作符 >> 右移操作符 注&#xff1a;移位操作符的操作数只能是整数。 << 左移操作符&#xff1a;移位规则&#xff1a; 左边抛弃、…

单片机程序无法下载?

原因一&#xff1a;电源问题 电源可能是导致STM32微控制器无法下载程序的一个常见原因。确保电源稳定对于正常运行和下载程序至关重要。以下是一些电源问题&#xff1a; 1. 电源电压不足&#xff1a;如果STM32微控制器没有足够的电压供应&#xff0c;它可能无法正常工作或下载程…

WPF ToggleButton 主题切换动画按钮

WPF ToggleButton 主题切换动画按钮 仿造最近看到的html中的一个效果&#xff0c;大致思路是文章这样&#xff0c;感觉还可以再雕琢一下。 代码如下 XAML: <UserControl x:Class"WPFSwitch.AnimationSwitch"xmlns"http://schemas.microsoft.com/winfx/200…

SpringData、SparkStreaming和Flink集成Elasticsearch

本文代码链接&#xff1a;https://download.csdn.net/download/shangjg03/88522188 1 Spring Data框架集成 1.1 Spring Data框架介绍 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快…

ROS消息过滤器之 message_filters::Synchronizer 使用详解

在ROS中&#xff0c;当我们有多个传感器发布的数据需要同步时&#xff0c;message_filters::Synchronizer 是一个非常有用的工具。它可以确保多个消息在时间上是同步的&#xff0c;以便更有效地处理数据。 1.什么是ROS消息过滤器&#xff1f; ROS消息过滤器是一种用于处理ROS…

【uni-app + uView】CountryCodePicker 国家区号组件

1. 效果图 2. 组件完整代码 <template><u-popup class="country-code-picker-container" v-if="show" :show

CV计算机视觉每日开源代码Paper with code速览-2023.11.7

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构】Understanding Deep Representation Lea…

护眼台灯横评|书客、明基、松下品牌大测评告诉你谁才是最亮的星!

护眼台灯哪个牌子好&#xff1f;随着护眼台灯普及率的日渐提高&#xff0c;护眼台灯市场也是十分火爆&#xff0c;但很多商家为了盈利&#xff0c;总是把重心放在宣传和营销手段上&#xff0c;从而导致护眼台灯的产品质量不过关&#xff0c;在使用过后不仅没有起到缓解眼睛疲劳…

k8s、数据存储

数据存储的概念 容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃时&#xff0c;kubelet 会重启它&#xff0c;但是容器中的文件将丢失——容器以干净的状态&#xff08;镜像最初的状态&#xff09;…

易货:一种绿色、高效的商业模式

随着社会经济的发展和人民生活水平的提高&#xff0c;人们手中闲置的物品越来越多&#xff0c;如何将这些物品盘活&#xff0c;成为了一个亟待解决的问题。易货商业模式应运而生&#xff0c;它不仅可以将闲置物品变成财富&#xff0c;还可以为企业和个人带来更多的商机和资源。…

屏幕提词软件Presentation Prompter mac中文版使用方法

Presentation Prompter for mac是一款屏幕提词器软件&#xff0c;它可以将您的Mac电脑快速变成提词器&#xff0c;支持编写或导入&#xff0c;可以在一个或多个屏幕上平滑地滚动&#xff0c;Presentation Prompter 下载是为适用于现场表演者&#xff0c;新闻广播员&#xff0c;…

msvcp140_CODECVT_IDS.dll丢失怎么办?msvcp140_CODECVT_IDS.dll丢失5个解决办法详解

首先&#xff0c;我要讲述一下我是如何遇到这个问题的。那时候&#xff0c;我正在打开一个电脑的应用程序&#xff0c;使用软件&#xff08;ps&#xff09;进行编程。在打开软件时候&#xff0c;突然发现程序无法正常启动&#xff0c;弹出了一个错误提示框&#xff0c;显示msvc…

软件测试|MySQL BETWEEN AND:范围查询详解

简介 在MySQL数据库中&#xff0c;使用BETWEEN AND操作符可以进行范围查询&#xff0c;即根据某个字段的值在指定范围内进行检索数据。这个操作符非常有用&#xff0c;因为它可以让我们轻松地筛选出位于两个特定值之间的数据&#xff0c;而不需要使用复杂的条件语句。 BETWEE…

云表|低代码开发是否真的靠谱?一试便知

最近&#xff0c;“低代码”这个概念在技术圈里火了起来&#xff0c;引发了广泛的讨论。一些人对其赞不绝口&#xff0c;认为它具有诸多优点&#xff0c;如减少开发周期&#xff0c;提高系统开发效率&#xff0c;降低开发成本&#xff0c;学习成本低等。他们甚至预测&#xff0…

Libra R-CNN: Towards Balanced Learning for Object Detection(2019.4)

文章目录 AbstractIntroduction引入问题1&#xff09; Sample level imbalance2) Feature level imbalance3) Objective level imbalance进行解决贡献 Related Work&#xff08;他人的work&#xff0c;捎带与我们的对比&#xff09;Model architectures for object detection&a…

基于SSM的学生二手书籍交易平台的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…
最新文章