Web自动化测试:WebDriverWait元素等待和全局设置

news2024/9/8 23:50:35

由于现在部分web应用加载方式的选择,页面会需要一定时间逐渐加载完毕,也就是说有的页面元素先加载出来,有的元素后加载出来。如果直接定位所查找的元素的话,可能会由于此元素尚未加载完毕找不到元素从而报错,由于网络不稳定这种情况出现的几率会大很多,一般解决方法的话,time.sleep()函数可以避免一些这种状况,但是缺少了灵活性。在selenium中有关于等待的方法可以比较灵活的解决这个问题,这次主要讲解selenium中元素等待WebDriverWait的使用,以及全局的设置。

1)关于全局设置超时时间

三个全局设置时间的方法中,设置的时间单位为秒,例如implicitly_wait(30),意思是超过30秒没有定位到一个元素,程序就会报错抛出异常,期间会一直轮询查找定位元素。

设置全局元素查找的超时时间

implicitly_wait(time_to_wait)
  • time_to_wait:超时时间(秒)

设置全局js异步脚本超时时间

set_script_timeout(time_to_wait)
  • time_to_wait:超时时间(秒)

设置全局页面载入超时时间

set_page_load_timeout(time_to_wait)
  • time_to_wait:超时时间(秒)

2)关于WebDriverWait的使用以及方法介绍(显示等待)

WebDriverWait可以当做元素等待,灵活的设置查找元素时的判断条件,同时由于方法中包含了大量webdriver自带的判断方法,只返回True和False,所以也可以灵活的当做断言来使用。

2.1基础格式(webDriverWait+until+(判断条件)):

这个格式的结构有点像语言中主谓宾的结构,实例的意思是,程序每0.5秒检查,是否满足:标题包含“百度一下”这个条件,检查是否满足条件的最长时间为:15秒,超过15秒仍未满足条件则抛出异常

WebDriverWait(driver, 15, 0.5).until(expected_conditions.title_contains("百度一下"))

2.2导入库

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

2.3WebDriverWait

满足条件后继续执行,否则在设置时间过后抛出异常

WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)

  • driver 所创建的浏览器driver
  • timeout 最长时间长度(默认单位:秒)
  • poll_frequency 间隔检测时长(每)默认0.5秒
  • ignored_exceptions 方法调用中忽略的异常,默认只抛出:找不到元素的异常

2.4 until / until_not

直到调用的方法返回值为True

until(method, message='')

  • method:expected_conditions库中定义的方法
  • message :自定义报错信息

直到调用的方法返回值为False

until_not(method, message='')

  • method:expected_conditions库中定义的方法
  • message :自定义报错信息

2.5 expected_conditions库中的方法

判断当前页面标题是否为title

title_is(title)

  • title:期望的页面标题

判断当前页面标题是否包含title

title_contains(title)

  • title:期望的页面标题

判断此定位的元素是否存在

presence_of_element_located(locator)

  • locator:元素的定位信息

判断页面网址中是否包含url

url_contains(url)

  • url:期望的页面网址

判断页面网址是否为url

url_to_be(url)

  • url:期望的页面网址

判断页面网址不是url

url_changes(url)

  • url:期望的页面网址

判断此定位的元素是否可见

visibility_of_element_located(locator)

  • locator:元素的定位信息

判断此元素是否可见

visibility_of(element)

  • element:所获得的元素

判断此定位的一组元素是否至少存在一个

presence_of_all_elements_located(locator)

  • locator:元素的定位信息

判断此定位的一组元素至少有一个可见

visibility_of_any_elements_located(locator)

  • locator:元素的定位信息

判断此定位的一组元素全部可见

visibility_of_all_elements_located(locator)

  • locator:元素的定位信息

判断此定位中是否包含text_的内容

text_to_be_present_in_element(locator, text_)

  • locator:元素的定位信息
  • text_:期望的文本信息

判断此定位中的value属性中是否包含text_的内容

text_to_be_present_in_element_value(locator, text_)

  • locator:元素的定位信息
  • text_:期望的文本信息

判断定位的元素是否为frame,并直接切换到这个frame中

frame_to_be_available_and_switch_to_it(locator)

  • locator:元素的定位信息

判断定位的元素是否不可见

invisibility_of_element_located(locator)

  • locator:元素的定位信息

判断此元素是否不可见

invisibility_of_element(element)

  • element:所获得的元素

判断所定位的元素是否可见且可点击

element_to_be_clickable(locator)

  • locator:元素的定位信息

判断此元素是否不可用

staleness_of(element)

  • element:所获得的元素

判断该元素是否被选中

element_to_be_selected(element)

  • element:所获得的元素

判断定位的元素是否被选中

element_located_to_be_selected(locator)

  • locator:元素的定位信息

判断该元素被选中状态是否和期望状态相同

element_selection_state_to_be(element,Boolean)

  • element:所获得的元素
  • Boolean:期望的状态(True/False)

判断定位的元素被选中状态是否和期望状态相同

element_located_selection_state_to_be(locator,Boolean)

  • locator:元素的定位信息
  • Boolean:期望的状态(True/False)

判断当前浏览器页签数量是否为num

number_of_windows_to_be(num)

  • num:期望的页签数量

判断此handles页签不是唯一打开的页签

new_window_is_opened(handles)

  • handles:页签

判断是否会出现alert窗口警报

alert_is_present()

3)案例演示

这里主要展示下WebDriverWait中,大部分的返回类型是True\False,部分方法,例如presence_of_element_located返回类型为一个元素,我们可以定位元素之后,直接对返回的元素进行click、send_keys等操作

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as Expect
 
driver = webdriver.Chrome()
driver.get("https://tieba.baidu.com")
 
# 部分关于元素定位的判断返回类型为:元素
assert_ele = WebDriverWait(driver, 15, 0.5).until(Expect.presence_of_element_located(("id", "wd1")))
assert_ele.send_keys("测试")
print("返回类型 %s" % assert_ele)
 
# 大部分方法返回类型为True\False
assert_judge = WebDriverWait(driver, 15, 0.5).until_not(Expect.title_is("网易"))
print("返回类型 %s" % assert_judge)
 
# 判断失败后会报错
assert_judge = WebDriverWait(driver, 5, 0.5).until(Expect.title_is("网易"), "错误信息:网页标题不是网易")

运行结果:

返回类型 <selenium.webdriver.remote.webelement.WebElement (session="961ec35d6f354c9b5ca65a80cd096104", element="0.5643114406724057-1")>
返回类型 False
Traceback (most recent call last):
  File "D:/1git/cenpur_uitest/test_case/demo.py", line 17, in <module>
    assert_judge = WebDriverWait(driver, 5, 0.5).until(Expect.title_is("网易"), "错误信息:网页标题不是网易")
  File "C:\Users\test\AppData\Local\Programs\Python\Python35\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 错误信息:网页标题不是网易

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流qq群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

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

在这里插入图片描述

全套资料获取方式:

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

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

相关文章

leetcode 647.回文子串

题目描述 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会…

【干货】有效的项目绩效管理评估,能成为组织成长的引擎

是谁已经开始在写年中总结了&#xff1f; 对于这件事&#xff0c;项目经理们肯定不会缺席&#xff0c;毕竟每周、每月、每个季度都少不了项目报告。这两天项目经理小刘&#xff0c;还在办公室吐槽项目绩效的数据实在太差了&#xff0c;询问如何能巧妙美化数据&#xff0c;这是…

算法学习day20

文章目录 513.找树左下角的值递归迭代 112 .路径总和递归迭代 113.路径总和II递归 106.从中序与后序遍历序列构造二叉树递归 105.从前序与中序遍历序列构造二叉树卡尔递归版本递归优化 总结 513.找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底…

K8S从入门到精通之基本组件介绍

文章目录 0.前言k8s 的dashboard基本组件活动图 1. 基本概念1.1. kube-apiserver1.2. etcd1.3. kube-scheduler1.4. kube-controller-manager1.5. kubelet1.6. kube-proxy1.7. coredns&#xff1a;1.8. Container Runtime1.9. Ingress Controller1.10. Storage Plugin1.11. Das…

原点安全携“金融机构消费者个人信息保护解决方案”亮相 2023 中国金融数字化转型发展大会

6 月 7 日&#xff0c;由中国金融电子化集团有限公司、南京市建邺区人民政府、中国人民银行南京分行主办&#xff0c;主题为“数驱转型 智创未来”的「2023 中国金融数字化转型发展大会暨第十三届中国城市商业银行信息化发展创新座谈会」于南京国际博览中心隆重召开。 本次会议…

使用POI实现JAVA操作Excel

Apache POI POI提供API给JAVA程序对Microsoft Office格式档案读和写的功能 POI工具介绍 POI 是用Java编写的免费开源的跨平台的 Java API&#xff0c;Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。主要是运用其中读取和输出excel的功能。 POI官网地…

每日一练 | 华为认证真题练习Day57

1、两台路由器通过PPP链路互连&#xff0c;管理员在两台路由器上配置了OSPF&#xff0c;且运行在同一个区域中&#xff0c;如果它们的Router ID相同&#xff0c;则下面描述正确的&#xff08;&#xff09;。 A. 两台路由器将会建立正常的完全邻居关系 B. 两台路由器将不会互相…

看看苹果如何平衡Vision Pro性能和功耗

众所周知&#xff0c;Quest 2极为严格的控制SoC运行频率&#xff0c;目的就是保证整机的“散热性能”&#xff0c;说白了就是发热不能严重、风扇噪音不能大。这也是VR头戴设备中降低用户体验的两个关键指标。 对于Quest 2很直接的一个优势就是&#xff0c;用户大多时候听不到狂…

Javaweb学习路线(3)——SpringBoot入门、HTTP协议与Tomcat服务器

一、SpringBoot入门 &#xff08;一&#xff09;第一个Springboot案例 1、创建Springboot工程&#xff0c;添加依赖。 2、定义类&#xff0c;添加方法并添加注释 3、运行测试。 pom.xml&#xff08;框架自动生成&#xff09; <?xml version"1.0" encoding&quo…

linux上安装es、Kibana、ik分词

基本概念 ES是什么&#xff1f;我们可以把ES比作一个Mysql数据库&#xff0c;同样用来存储数据&#xff0c;不过比Mysql提供了更多的搜索功能,例如分词搜索&#xff0c;关联度搜索等&#xff0c;而且搜索速度也不是同一级别的&#xff0c; ES能够实现百万数据/秒的查询速度。接…

【Java|golang】1171. 从链表中删去总和值为零的连续节点

给你一个链表的头节点 head&#xff0c;请你编写代码&#xff0c;反复删去链表中由 总和 值为 0 的连续节点组成的序列&#xff0c;直到不存在这样的序列为止。 删除完毕后&#xff0c;请你返回最终结果链表的头节点。 你可以返回任何满足题目要求的答案。 &#xff08;注意…

Linux内核中内存管理相关配置项的详细解析9

接前一篇文章&#xff1a;Linux内核中内存管理相关配置项的详细解析8 十三、Enable recovery from hardware memory errors 对应配置变量为&#xff1a;CONFIG_MEMORY_FAILURE。 此项只有选中和不选中两种状态&#xff0c;默认为选中。 内核源码详细解释为&#xff1a; Enab…

HTML5 input元素新的特性

在HTML5中&#xff0c;<input>元素增加了许多新的属性、方法及控件。本文章分别对这三方面进行介绍。 目录 1. 属性 2. 方法 3. 新控件 1. 属性 <input>元素在HTML5中新增加的属性有&#xff1a;autocomplete 、autofocus、form、formaction、formenctype、f…

人工智能网站KameAI

人工智能网站KameAI 前言 人工智能的崛起与发展随着科技的飞速发展&#xff0c;人工智能(AI)已经逐渐成为我们生活中不可或缺的一部分。它的出现不仅改变了我们与世界的互动方式&#xff0c;还为各行各业带来巨大的便利。今天&#xff0c;我们就来聊一聊一个人工智能网站—Ka…

合并两个排序的链表

题目&#xff1a; 输入两个递增排序的链表&#xff0c;合并着两个链表并使新链表中的结点仍然是按照递增顺序的。例如输入的链表1和链表2如下&#xff0c;合并后的为链表3。链表的结点定义如下&#xff1a; struct ListNode {int value;ListNode *next; }; 复制 解题思路&…

APP性能测试,你需要关注哪些指标?

一、Android客户端性能测试常见指标 1、内存 2、CPU 3、流量 4、电量 5、启动速度 6、滑动速度、界面切换速度 7、与服务器交互的网络速度 二、预期标准指定原则 1、分析竞争对手的产品&#xff0c;所有指标要强于竞品 2、产品经理给出的预期性能指标数据 3、符合业…

Unity3D:Scene 视图导航

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 Scene 视图导航 场景视图具有一组导航控件&#xff0c;可帮助您高效地四处移动&#xff1a; 场景视图辅助图标移动、旋转和缩放工具居中工具 场景视图辅助图标 场景辅助图标将显…

MySQL性能优化:索引优化

一、索引基础知识 &#xff08;一&#xff09;辅助索引/二级索引 叶子节点除了包含键值以外&#xff0c;每个叶子节点中的索引行中还包含了一个书签( bookmark) &#xff08;每个索引一颗B树&#xff0c;不包含行记录的全部数据&#xff09; &#xff08;二&#xff09; 回表…