Selenium三种等待方式的使用!

news2024/11/27 17:36:02

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
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

二、隐式等待

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

隐式等待的方法为: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时候很有用,不过建议慎用这种方法,因为太死板,严重影响程序执行速度!

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

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】常见的Linux命令

目录 一、与目录有关的操作 二、与文件有关的操作 三、针对目录的操作 三、在linux上搭建环境 一、与目录有关的操作 1.ls 显示目录内容列表 ls / 这里的 / 表示根目录,相当于windows中的此电脑,linux中没有盘符。 ls -l / 显示详细信息 可以…

【EI会议征稿】第四届生物信息学与智能计算国际学术研讨会(BIC 2024)

第四届生物信息学与智能计算国际学术研讨会(BIC 2024) 2024 4th International Conference on Bioinformatics and Intelligent Computing 2024年第四届生物信息学与智能计算国际学术研讨会 (BIC 2024)将定于2024年1月26-28日在…

SOLIDWORKS® 2024 新功能 - PDM

SOLIDWORKS 2024 新功能 - PDM 1、改进的视觉内容 • 通过装配体可视化功能,在 SOLIDWORKS 中以图形方式查看零部件数据,如工作流程状态。 • 使用特定图标迅速识别焊件切割清单零部件。 优点 重要数据和系统信息一目了然。 2、增强的数据保护和跟踪功…

Controllable Guide-Space for Generalizable Face Forgery Detection

一、研究背景 以往工作专注于提取伪造特征的共同特性和真假域鉴别性信息,以提升特征泛化性。 但在训练过程中,这些方法只区分真假域,并将不同的伪造域看作一类而不加以区分。 这会导致伪造样本进一步以伪造不相关特征(如&#xff…

在ros中 两个摄像头

欧最后有了一个需求,需要在ros中接两摄像头,完成后写一下步骤。 以下是我的设备, 通过一个3.0的转接头来连接两个摄像头, 首先,通过下面的命令 ls /dev/video* //插上摄像头后打开终端查看是否检测到摄像头 我这…

职业规划:如何成为年薪80W+的Salesforce项目经理?

Salesforce项目经理负责监督各种Salesforce云和端到端Salesforce项目,首要任务是确保项目成功,并在预算范围内按时交付。Salesforce项目经理的薪资是不断增长的Salesforce经济中的热门话题。 Salesforce项目经理的职责 项目经理的职业发展更多地关注经验…

三国杀中的概率学问题2——神郭嘉

前言 四年前,我写过一篇博客三国杀中的概率学问题。当时有一条评论,让我算一算神郭嘉慧识的摸牌数。这也是我写这篇博客的动力来源。相比起四年前,我的数学水平渐长,于是想做一些更深入的数学问题。这篇文章将从更加理论的角度来…

JMeter的使用——傻瓜式学习【下】

目录 前言 1、自动录制脚本 1.1、原理 1.2、JMeter脚本录制 2、JMeter直连数据库 2.1、直连数据库的作用 2.2、JMeter直连数据库的步骤 案例: 3、JMeter的逻辑控制器 3.1、if控制器 案例: 3.2、循环控制器 案例: 3.3、ForEach控…

答题小程序好友PK答题模块来袭,快来一决高下!

答题小程序源码之好友pk答题怎么做 各位亲爱的答题小程序小伙伴,大家好!今天我们来一起看一下答题小程序的好友PK答题怎么做,好友PK顾名思义即邀请微信好友进行一对一的PK答题,该模式的特点是有针对性的PK答题,比如我要…

Kafka、RabbitMQ、RocketMQ中间件的对比

消息中间件现在有不少,网上很多文章都对其做过对比,在这我对其做进一步总结与整理。 RocketMQ 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成…

敲敲云零代码平台—近期亮点功能,让开发者对零代码心动~

近期敲敲云零代码平台,更新了很多实用新功能,包括汇总组件添加了筛选条件,增加了汇总日期控件,子表添加了批量添加和默认值等等。 1. 单选/多选/下拉选择 颜色设置 效果展示 在列表和表单中可通过不同颜色显示字段的不同等级或者…

【深⼊理解指针4】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 回调函数是什么? 2. qsort使用举例 2.1测试qsort函数排序整型数组 2.2测试qsort函数排序结构体数组 3. qsort函数的模拟实现 3.1测试bubble_sort函数…

C++对象的内存分布和虚函数表

Linux C/C 开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全) c中一个类中无非有四种成员:静态数据成员和非静态数据成员,静态函数和非静态函数。 1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 2.静态数据成员被提取出来…

Linux -------------------设置防火墙和SELinux

(一)防火墙概述 防火墙的概念:防火墙是一种非常重要的网络安全工具,它是网络安全的重要组成部分,用于保护计算机网络免受未经授权的访问、恶意攻击和数据泄漏等威胁等。 防火墙的特点 防火墙通常具备以下几个特点。 …

(免费领源码)springboot#MYSQL钓鱼交友平台小程序33506-计算机毕业设计项目选题推荐

目 录 摘要 1 绪论 1.1课题目的与意义 1.2国内外研究现状 1.3论文结构与章节安排 1.4小程序框架以及目录结构介绍 2 Springboot钓鱼交友平台小程序系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2…

Linux内核是如何创建进程?

目录 1.Linux如何创建进程 2.fork函数原理 2.1 fork函数原型 2.2 fork函数实现原理 2.3 父子进程虚拟地址空间(mm_struct)之间的关系 2.4 写时拷贝(copy-on-write)技术 2.5 父子进程如何共享文件(files_struct&…

四十三、【进阶】前缀索引

1、基础 简单点说,前缀索引就是当索引字段类型较大时,有时候需要索引很长的字符串,查询时,会浪费更大的空间,此时可以只对该索引的一部分前缀建立索引,可以大大的节省空间。 前缀索引一般配合选择度进行使用…

多测师肖sir_高级金牌讲师_性能指标

性能指标 一、性能测试指标 性能测试是通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。 目的:验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。 二、指标分为两大类: 软件…

ZKP9 SNARKs based on Linear PCP (Pinocchio Groth16)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 9: SNARKs based on Linear PCP (Yupeng Zhang) SNARKs learned so far Earliest Implemented SNARKs Pros Shortest proof size (3 elements [Groth16])Fast verifier (bilinear pairing) Cons FFT and group exponentiatio…

西门子PLC ModbusTcp通信访问网关后从站(SCL语言轮询状态机FB)

西门子PLC的ModbusTcp通信在专栏已有系列文章介绍,所不同的是每个项目的通信需求都略有不同,今天我们以访问网关后的三个从站数据来举例,给出轮询的推荐写法,这里我们利用SCL语音进行编程,方便大家导入导出到自己的项目里使用,相关文章链接大家可以参考下面地址: SMART…