Selenium三种等待方式的使用!

UI自动化测试,大多都是通过定位页面元素来模拟实际的生产场景操作。但在编写自动化测试脚本中,经常出现元素定位不到的情况,究其原因,无非两种情况:1、有frame;2、没有设置等待。

因为代码运行速度和浏览器加载渲染速度,不是一个量级,所以导致了这种情况发生。在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间:显式等待、隐式等待、强制等待。

一、显示等待

定义:等待某个条件成立时继续执行,否则在达到最大时长时抛出异常(TimeoutException);

WebDriverWait类是由webdriver提供的等待方法,配合该类提供的until()和until_not()方法一起使用,就可以根据判断条件而灵活进行等待,格式如下:


1 WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

2 driver:浏览器驱动

3 timeout:最长超时时间

4 poll_frequency:检测间隔时间,默认0.5s

5 ignored_exceptions:超时后的异常信息,默认情况抛出NoSuchElementException异常

6 WebDriverWait()一般由until()或until_not方法配合使用,下面是这两种方法的说明:

7 until(method,message=''):调用该方法提供的驱动程序作为一个参数,直到返回值为True;

8 until_not(method,message=''):调用该方法提供的驱动程序作为一个参数,直到返回值为Flase;

示例代码如下:


1 # coding = utf-8

2 from selenium import webdriver

3 from selenium.webdriver.support.wait import WebDriverWait

4 from selenium.webdriver.support import expected_conditions as EC

5 from selenium.webdriver.common.by import By

6

7 driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")

8 driver.implicitly_wait(10)

9 driver.get('http://www.cnblogs.com/imyalost/')

10 locator = (By.LINK_TEXT, '老_张')

11

12 try:

13 WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))

14 print(driver.find_element_by_link_text('老_张').get_attribute('href'))

15 finally:

16 driver.close()

代码解析:

本例中,通过as关键字将expected_conditions重命名为EC,并调用presence_of_element_located()方法判断元素是否存在;

上面的例子中,同时使用了隐性等待和显性等待,但是需要注意的是:等待的最长时间取两者之中的最大值;

expected_conditions类提供的预期条件判断方法如下:


1 title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值

2 title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值

3 presence_of_element_located : 判断某个元素是否被加到了dom树里,并不代表该元素一定可见

4 visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0

5 visibility_of : 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了

6 presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是‘column-md-3‘,那么只要有1个元素存在,这个方法就返回True

7 text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串

8 text_to_be_present_in_element_value : 判断某个元素中的value属性是否 包含 了预期的字符串

9 frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False

10 invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见

11 element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable

12 staleness_of : 等某个元素从dom树中移除,注意,这个方法也是返回True或False

13 element_to_be_selected : 判断某个元素是否被选中了,一般用在下拉列表

14 element_selection_state_to_be : 判断某个元素的选中状态是否符合预期

15 element_located_selection_state_to_be : 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator

16 alert_is_present : 判断页面上是否存在alert

二、隐式等待

定义:通过设定的时长等待页面元素加载完成,再执行下面的代码,如果超过设定时间还未加载完成,则继续执行下面的代码(注意:在设定时间内加载完成则立即执行下面的代码);

隐式等待的方法为:implicitly_wait,示例代码如下:


1 # coding = utf-8

2 from selenium import webdriver

3

4 driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")

5 driver.implicitly_wait(10) # 隐性等待,最长等10秒

6 driver.get('http://www.cnblogs.com/imyalost/')

7

8 print(driver.current_url)

9 driver.quit()

代码解析:

本例中,设置的等待时长为10秒,但这10秒并非一个固定时间,并不影响脚本执行速度;其次,隐式等待对整个driver的周期都起作用,因此只需要设置一次即可。

三、强制等待

即sleep()方法,由python中的time模块提供,强制让代码等待xxx时间,无论前面的代码是否执行完成或者还未完成,都必须等待设定的时间。

示例代码如下:


1 # coding = utf-8

2 from selenium import webdriver

3 from time import sleep

4

5 driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")

6 driver.get('http://www.cnblogs.com/imyalost/')

7

8 sleep(5)

9

10 print(driver.current_url)

11 driver.quit()

代码解析:

本例中,设置强制等待时间为5秒,5秒之后,打印获取到的当前页面的url,然后关闭窗口。这种强制等待的方法,在debug时候很有用,不过建议慎用这种方法,因为太死板,严重影响程序执行速度!

以上三种等待方法,在具体的场景中需要根据情况选择合适的方法,灵活运用

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

【Vue】购物车案例-构建项目

脚手架新建项目 (注意:勾选vuex) 版本说明: vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo需要勾选上vuex,由于这个项目只有一个页面,vuex可勾可不勾 将原本src内容清空,替换成教学…

VISIO安装教程+安装包

文章目录 01、什么是VISIO?02、安装教程03、常见安装问题解析 01、什么是VISIO? Visio是由微软开发的流程图和图表绘制软件,它是Microsoft Office套件的一部分。Visio提供了各种模板和工具,使用户能够轻松创建和编辑各种类型的图…

SwiftUI七使用UI控件

代码下载 在应用中,用户可以创建一个简介来描述他们自已的个人情况。为了让用户可以编辑自己的简介,需要添加一个编辑模式并设计一个偏好设置界面。这里使用多种通用控件来展示用户的各种数据,并在用户保存他们所做的数据修改时更新地标数据…

PCB 蚀刻因子(Etch Factor)

The standard definition for Etch Factor is to specify it as the ratio of trace thickness / amount of over-etching. This gives the following formula: Etch Factor T/[0.5(W1-W2)] 例如,W1 5.2mil, W1 4.2mil, T 3.7mil&#…

四维轻云|支持多源数据融合、城市级实景三维模型展示

四维轻云是一款轻量化的地理空间数据管理云平台,具有项目管理、数据上传、场景搭建、发布分享、素材库等功能模块,支持多用户在线协作管理,实现了轻量化、便捷化的空间数据应用。 1、多源数据融合 平台支持管理、展示各类空间数据&#xff…

差动放大器

差动器的出现是为了解决直接耦合电路存在的零点漂移问题,另外,差动放大器还有灵活的输入,输出方式。 一,基本差动放大器 差动放大器在电路结构上具有对称性,三极管VT1,VT2同型号,R1R2,R3R4,R5…

【天池科普】1. 为啥人人都要学AI

大家好!欢迎来到天池的AI科普系列课程,本期是第一期内容。在这个信息爆炸的时代,人工智能(AI)不仅是技术进步的标志,更是推动社会向前发展的强大引擎。无论你是AI领域的新手,还是有一定基础的学…

助力高考,一组彩色的文字

1、获取文本内容 首先&#xff0c;获取每个<div>元素的文本内容&#xff0c;并清空其内部HTML&#xff08;innerHTML ""&#xff09;。 2、创建<span>元素 然后&#xff0c;它遍历文本的每个字符&#xff0c;为每个字符创建一个新的<span>元素…

【Hudi】编译

目录 编译安装编译环境准备编译Hudi上传源码包修改pom文件新增repository加速依赖下载修改依赖的组件版本 修改源码兼容hadoop3手动安装Kafka依赖1&#xff09;下载jar包2&#xff09;install到maven本地仓库 解决spark模块依赖冲突 执行编译命令编译成功 编译安装 编译环境准…

用友U8 表单视图名查询方法

比如要获取【采购订单】表名和视图名 具体操作如下&#xff1a; 先打开写字板&#xff0c;然后进入U8的采购订单做单界面&#xff0c;按住键盘上的&#xff0c;CtrlshiftC&#xff0c;有的是CtrlC&#xff0c;点增加 然后CtrlV到写字板 key就是采购订单的值 打开SQL 输入语句…

AI绘画工具Ideogram测评:和Midjourney不分伯仲的AI图像工具之一

Ideogram 是一款令人印象深刻的人工智能图像工具&#xff0c;但尽管它于去年 8 月推出并具有不可思议的文本渲染能力&#xff0c;但它并没有引起其他一些更引人注目的 GenAI 服务的关注。 随着该公司推出其生成式人工智能模型 1.0 版本&#xff0c;这种情况即将发生改变&#…

Qt OPC UA初体验

介绍 OPC UA全称Open Platform Unified Architecture&#xff0c;开放平台统一架构&#xff0c;是工业自动化领域通用的数据交换协议&#xff0c;它有两套主要的通信机制&#xff1a;1.客户端-服务器通信&#xff1b;2.发布订阅。Qt对OPC UA通信标准也提供了支持&#xff0c;目…

【雷达原理】一维CFAR检测算法——对比分析与代码实现

目录 引言一、仿真实例1.1 均匀背景杂波1.2 杂波边缘1.3 多干扰目标杂波 二、MATLAB代码参考文献 引言 推荐博文【目标检测】雷达目标CFAR检测算法 上述文章介绍了四种典型CFAR检测算法的特点及性能对比。本文将利用MATLAB进行仿真&#xff0c;通过实例验证和对比这几种算法的…

❤ npm运行打包报错归纳

❤ 前端运行打包报错归纳 &#xff08;安装依赖&#xff09;Cannot read property ‘pickAlgorithm’ of null" npm uninstall //删除项目下的node_modules文件夹 npm cache clear --force //清除缓存后 npm install //重新安装 备用安装方式 npm install with --for…

互联网产品经理转型为AI产品经理,我的心得体会

前言 作为一个非AI技术出身的人工智能产品经理&#xff0c;在转行之前会面对很对自我怀疑。在做了4年人工智能产品经理之后&#xff0c;也做了点总结&#xff0c;主要介绍AI产品经理在设计过程中的一些要点&#xff0c;和互联网产品经理9相似的工作内容就没有刻意的去提&#…

PG sql调优案例学习

一&#xff0c;开发范式 1.不要轻易把字段嵌入到表达式 例&#xff1a;在sal列上有索引,但是条件语句中把sal列放在了表达式当中,导致索引被压抑,因为索引里面储存的是sal列的值,而不是sal加上100以后的值。 在条件中查询谁的工资1002000。这样写即使在sal上有索引也会走全表…

cf 欧几里得距离

说明&#xff1a;欧几里得距离本质就是两点间距离 distancesqrt( sum(ai-bi)2 ) Problem - F - Codeforces 代码

跨平台电商数据对比:淘宝与他者的较量

——比较分析淘宝和其他电商平台&#xff08;如京东、拼多多&#xff09;的数据&#xff0c;探索各自的优势和市场定位 在当今的电子商务领域&#xff0c;跨平台电商数据对比成为了企业制定策略和优化运营的重要工具。淘宝作为中国最大的电商平台之一&#xff0c;与京东、拼多…

嵌入式仪器模块:数据记录模块和自动化测试软件

• 32 位分辨率 • 250 KSPS 采样率 • 可以同时并且连续地记录两个通道的电压输入 • 实时上传原始数据至 PC 端 通道22 输入阻抗 电压22 kΩ10 MΩ电流0.2 Ω输入范围电压 250 mV 4.5 V电流1.5 A耦合DCDC带宽450 Hz385 HzADC 分辨率32 Bits24 Bits采样率10 kSPS250 kSPS测…

还在为复制粘贴烦恼吗?这5个工具帮你轻松搞定

在日常工作中&#xff0c;CtrlC和CtrlV无疑是我们使用最为频繁的快捷键组合。 复制粘贴&#xff0c;轻松快捷。 但是在使用中&#xff0c;也会有一点不便&#xff0c;那就是无法保存剪贴历史内容。 比如我说复制之后&#xff0c;我想要想要找回这一次复制之前的内容&#xf…