web自动化测试-selenium的三种等待
一、等待的作用
1、在系统的功能运行过程中,所有的内容是需要一定的时间来实现展示,
2、时间耗费长短与网络速度、系统框架设定、接口的执行复杂度有关,
3、因此需要设置缓冲时间,若未设置缓冲时间,容易导致元素找不到
二、等待方式
强制等待 sleep()
导入time中的sleep,等待X秒后再执行后面的代码
缺点
1、无法精确把握等待的时间(如无法判断页面是否加载完成,是否可以进行下一步操作)
2、一直使用强制等待会降低自动化效率,浪费大量时间
优点
1、简单使用,一般在调试中使用
隐式等待
设置一个隐形的等待,设置最长等待时间,如果在这个时间内完成了页面内容全部加载,则进行下一步操作,否则一直等待时间结束,再进行下一步
缺点
必须等待页面加载完成才能进行下一步,应用度上不太灵活
优点
对整个WebDriver周期有效,所以只需要设置一次
显示等待
专门用于指定的条件进行等待,在设置的最大时长内,依照查找的时间频率来进行搜索,查找指定的对象,until表示如果找到,则继续下一步,否则报出异常
优点
精确对某个特定条件进行等待,条件成立进行下一步,否则报出异常
缺点
应用上而言,相较于其他两种等待更为复杂
三、自动化中应该避免的坑
页面元素定位不到原因:
1、元素定位错误
2、未添加等待时间
3、直接copy容易出错
针对上述问题,采用xpath方式手写定位,确认元素的正确性
四、代码实现
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
dr=webdriver.Chrome() #隐式等待
dr.implicitly_wait() dr.get('http://www.baidu.com') #显示等待
element = WebDriverWait(dr,).until(ec.presence_of_element_located((By.ID,'KW')))
element.send_keys('selenium') dr.quit()
五、expected_conditions类说明
ec.title_is 判断当前页面标题是否符合预期
ec.title_contains 判断当前页面标题是否包含预期字符串
ec.presence_of_element_located 判断元素是否被加载DOM树里,不代表元素一定可见
ec.visibility_of_element_located 判断元素是否可见
ec.visibility_of 与上面方法作用相同,只是上面方法参数为定位,该方法接收的参数为定位后的元素
ec.presence_of_all_elements_located 判断是否至少有一个元素存在DOM树里
ec.text_to_be_present_in_element 判断某个元素的text是否包含预期的字符串
ec.text_to_be_present_in_element_value 判断某个元素的value属性是否包含预期的字符串
ec.frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去
ec.invisibility_of_element_located 判断某个元素是否不存在DOM树里
ec.element_to_be_clickable 判断某个元素是否可见并可以点击
ec.staleness_of 等到一个元素从DOM树里移除
ec.element_to_be_selected 判断某个元素是否被选中
ec.element_selection_state_to_be 与上面方法作用相同,只是上面方法参数为定位,该方法接收的参数为定位后的元素
ec.alert_is_present 判断页面是否存在alert
web自动化测试-selenium的三种等待的更多相关文章
- Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题
在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...
- Selenium:三种等待方式
UI自动化测试,大多都是通过定位页面元素来模拟实际的生产场景操作.但在编写自动化测试脚本中,经常出现元素定位不到的情况,究其原因,无非两种情况:1.有frame:2.没有设置等待. 因为代码运行速度和 ...
- selenium webdriver三种等待方法
webdriver三种等待方法 1.使用WebDriverWait from selenium import webdriverfrom selenium.webdriver.common.by im ...
- 【转】selenium webdriver三种等待方法
原文:https://www.cnblogs.com/lgh344902118/p/6015593.html webdriver三种等待方法 1.使用WebDriverWait from seleni ...
- selenium的三种等待
1. 强制等待 最简单粗暴,sleep(xx),不管你浏览器是否加载完了,程序都得等待xx秒,时间一到,再继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式, ...
- Selenium:三种等待方式详解
我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...
- Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...
- selenium的三种等待方式
selenium有三种等待方式 1.time.sleep() 设置等待最简单的方法就是强制等待,但一般不建议使用,可以在调试的时候进行使用 2.隐性等待 driver.implictily_wait( ...
- selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python
我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...
随机推荐
- Debian系Linux源码安装Redis5.0.6
一,先在官网下载源码包:https://redis.io/download 二,解压源码包,并cd到解压后的目录: 三,执行make MALLOC=libc: 接着cd src[解压的目录里有这个子目 ...
- js中基本包装类型详情
基本包装类型 基本包装类型有Boolean,Number和string类型,每当读取一个基本类型值时,后台就会创建一个对应的基本包装类型对象. 从逻辑上,基本类型值不是对象,没有方法,但从技术上来看, ...
- day24——面向对象三大特性、鸭子类型、类的约束、super的深度解析
day24 面向对象的三大特性 继承.封装.多态 封装:把一堆东西(代码,数据)放到一个地方(空间),并且可以使用 class Student: def __init__(self, name, se ...
- [终极巨坑]golang+vue开发日记【二】,登陆界面制作(一)
写在前面 本期内容是适合第一次使用vue或者golang开发的,内容会以实战的形式来讲解.看懂本段内容需要了解基础内容有html,css,最好可以看一下vue的基础.并且这里的每个知识点不可能详细解说 ...
- java网站架构演变过程
网站架构演变过程. .传统架构.传统的SSH架构,分为三层架构web控制层.业务逻辑层.数据库访问层..传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH架构或者SSM架构,业务 ...
- CapsLock魔改大法——变废为宝实现高效编辑
前言 CapsLock,也就是键盘左边中间那个大写锁定.平时很少会用到,跟shift功能重复不谈,更多的时候还会带来各种额外的麻烦. 一直以来的都是一个非常碍事讨厌的存在.就是这么一个垃圾键,偏偏却占 ...
- Scala 系列(七)—— 常用集合类型之 Map & Tuple
一.映射(Map) 1.1 构造Map // 初始化一个空 map val scores01 = new HashMap[String, Int] // 从指定的值初始化 Map(方式一) val s ...
- Huber Loss 介绍
Huber Loss 是一个用于回归问题的带参损失函数, 优点是能增强平方误差损失函数(MSE, mean square error)对离群点的鲁棒性. 当预测偏差小于 δ 时,它采用平方误差,当预测 ...
- nginx+lua+storm的热点缓存的流量分发策略自动降级
1.在storm中,实时的计算出瞬间出现的热点. 某个storm task,上面算出了1万个商品的访问次数,LRUMap 频率高一些,每隔5秒,去遍历一次LRUMap,将其中的访问次数进行排序,统计出 ...
- Linux RedHat 7 配置本地 YUM源
尽管RPM安装方法能够帮助用户查询软件相关的依赖关系,但是还是需要安装人员自己来解决,而且有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件事件非常痛苦和耗费事件的事情,而Yum软件仓库可 ...