selenium WebDriverWait类等待机制的实现


Posted in Python onMarch 18, 2020

在自动化测试脚本的运行过程中,可以通过设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种:

一、固定等待(time)

  固定待是利用python语言自带的time库中的sleep()方法,固定等待几秒。这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用。(注:脚本调试过程时,还是可以使用的,方便快捷)

from selenium import webdriver
import time

#驱动浏览器
driver = webdriver.Chrome()

#设置窗口最大化
driver.maximize_window()
driver.get('https://www.baidu.com/')

#设置固定等待
time.sleep(2)

driver.quit()

二、隐式等待(implicitly_wait())

 webdriver类提供了implicitly_wait()方法来配置超时时间。隐式等待表示在自动化实施过程中,为查找页面元素或者执行命令设置一个最长等待时间。如果在规定时间内页面元素被找到或者命令被执行完成,则执行下一步,否则继续等待直到设置的最长等待时间截止

from selenium import webdriver

#驱动浏览器
driver = webdriver.Chrome()

#设置隐式等待
driver.implicitly_wait(30)

#设置窗口最大化
driver.maximize_window()
driver.get('https://www.baidu.com/')

   注:隐式等待的好处是不用像固定等待方法一样死等时间N秒,可以在一定程度上提升测试用例的执行效率。不过这种方法也存在一定的弊端,那就是程序会一直等待整个页面加载完成,也就是说浏览器窗口标签栏中不再出现转动的小圆圈,才会继续执行下一步。

三、显式等待(WebDriverWait)

  显示等待会每个一段时间(该时间一般都很短,默认为0.5秒,也可以自定义),执行自定义的程序判断条件,如果判断条件成立,就执行下一步,否则继续等待,直到超过设定的最长等待时间,然后抛出TimeOutEcpection的异常信息。

alert_is_present():判断页面是否出现alert框

# coding:utf-8
from selenium import webdriver
#导入By类
from selenium.webdriver.common.by import By
#导入显示等待类
from selenium.webdriver.support.ui import WebDriverWait
#导入期望场景类
from selenium.webdriver.support import expected_conditions

driver = webdriver.Chrome()

#alert_is_present():判断页面是否出现alert框
result=WebDriverWait(driver,10).until(expected_conditions.alert_is_present())
print(result.text)

element_located_selection_state_to_be(locator,state):判断一个元素的状态是否是给定的选择状态

第一个传入参数是一个定位器,定位器是一个元组(by,path);第二个传入参数表示期望的元素状态,True表示选中状态,Flase表示未选中

#element_located_selection_state_to_be():判断一个元素的状态是否是给定的选择状态
result=WebDriverWait(driver,10).until(expected_conditions.element_located_selection_state_to_be((By.ID,'kw'),True))

element_selection_state_to_be(driverObject,state):判断给定的元素是否被选中

第一个传入参数是一个webdriver对象,第二个参数是期望的元素的状态,True表示选中状态,Flase表示未选中

#element_selection_state_to_be():判断给定的元素是否被选中
result=WebDriverWait(driver,10).until(expected_conditions.element_selection_state_to_be((driver.find_element_by_id('kw')),True))

element_located_to_be_selected(locator):期望某个元素处于被选中状态

参数传入的是一个定位器

#element_located_to_be_selected():期望某个元素处于被选中状态
result=WebDriverWait(driver,10).until(expected_conditions.element_located_to_be_selected((By.ID,'kw')))

element_to_be_selected():期望某个元素处于选中状态

传入参数是一个webdriver实例对象

#element_to_be_selected():期望某个元素处于选中状态
result=WebDriverWait(driver,10).until(expected_conditions.element_to_be_selected(driver.find_element_by_id('kw')))

element_to_be_clickable():判断元素是否可见并且能被单击,条件满足返回页面元素对象,否则返回Flase

#element_to_be_clickable():判断元素是否可见并且能被单击,条件满足返回页面元素对象,否则返回Flase
result=WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable(driver.find_element_by_id('hh')))

frame_to_be_available_and_switch_to_it(parm):判断frame是否可用

如果可用返回True并切入到该frame,参数parm可以是定位器locator(by,path)组成的元组,或者定位方式:id、name、index(frame在页面上索引号),或者webelement对象。

#frame_to_be_available_and_switch_to_it():判断frame是否可用
#传入ID值‘kk'
result1=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(By.ID,'kw'))
#传入frame的webelement对象
result2=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_id('kw')))
#传入frame在页面中索引号
result3=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(1))

invisibility_of_element_located(locator):希望某个元素不可见或者不存在DOM中

满足条件返回True,否则返回定位到的元素对象

#invisibility_of_element_located():希望某个元素不可见或者不存在DOM中,满足条件返回True,否则返回定位到的元素对象
result8=WebDriverWait(driver,10,0.2).until(EC.invisibility_of_element_located(By.ID,'kw'))

visibility_of_element_located(locator):希望某个元素出现在DOM中并且可见

满足条件返回该元素的页面元素对象

#visibility_of_element_located():希望某个元素出现在DOM中并且可见,满足条件返回该元素的页面元素对象
result9=WebDriverWait(driver,10,0.2).until(EC.visibility_of_element_located(driver.find_element_by_id('kw')))

visibility_of(webelement):希望某个元素出现在页面的DOM中,并且可见,满足条件返回该元素的页面元素对象

#visibility_of():希望某个元素出现在页面的DOM中,并且可见,满足条件返回该元素的页面元素对象
result10=WebDriverWait(driver,10,0.2).until(EC.visibility_of(driver.find_element_by_id('kw'))

visibility_of_any_elements_located(locator):希望某个元素出现在DOM中并且可见

如果满足条件返回该元素的页面元素对象

#visibility_of_any_elements_located():希望某个元素出现在DOM中并且可见
result11=WebDriverWait(driver,10,0.2).until(EC.visibility_of(By.TAG_NAME,'input'))

presence_of_all_elements_located(locator):判断页面至少有一个如果元素出现,如果满足条件,返回所有满足定位表达式的页面元素

#presence_of_all_elements_located():判断页面至少有一个如果元素出现,如果满足条件,返回所有满足定位表达式的压面元素
result12=WebDriverWait(driver,10,0.2).until(EC.presence_of_all_elements_located(By.ID,'kw'))

presence_of_element_located(locator):判断某个元素是否存在DOM中,不一定可见,存在返回该元素对象

#presence_of_element_located():判断某个元素是否存在DOM中,不一定可见,存在返回该元素对象
result12=WebDriverWait(driver,10,0.2).until(EC.presence_of_element_located(By.ID,'kw'))

staleness_of(webelement):判断一个元素是否仍在DOM中,如果在规定时间内已经移除返回True,否则返回Flase

#staleness_of():判断一个元素是否仍在DOM中,如果在规定时间内已经移除返回True,否则返回Flase
result13=WebDriverWait(driver,10,0.2).until(EC.staleness_of(driver.find_element_by_id('kw')))

text_to_be_present_in_element():判断文本内容test是否出现在某个元素中,判断的是元素的text

#text_to_be_present_in_element():判断文本内容test是否出现在某个元素中,判断的是元素的text
result15=WebDriverWait(driver,10,0.2).until(EC.text_to_be_present_in_element(By.TAG_NAME,"p"))

text_to_be_present_in_element_value():判断text是否出现在元素的value属性值中

#text_to_be_present_in_element_value():判断text是否出现在元素的value属性值中
result16=WebDriverWait(driver,10,0.2).until(EC.text_to_be_present_in_element_value((By.ID,'kw'),'随便'))

title_contains():判断页面title标签的内容包含partial_title,只需要部分匹配即可

#title_contains():判断页面title标签的内容包含partial_title,只需要部分匹配即可,包含返回True,不包含返回Flase
result17=WebDriverWait(driver,10,0.2).until(EC.title_contains("你就知道"))

title_is():判断页面title内容是与传入的title_text内容完全匹配

#title_is():判断页面title内容是与传入的title_text内容完全匹配,匹配返回True,否则返回Flase
result18=WebDriverWait(driver,10,0.2).until(EC.title_is("百度一下,你就知道"))

到此这篇关于selenium WebDriverWait类等待机制的实现的文章就介绍到这了,更多相关selenium WebDriverWait内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的Matplotlib模块入门教程
Apr 15 Python
神经网络理论基础及Python实现详解
Dec 15 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
centos7之Python3.74安装教程
Aug 15 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
Python3并发写文件与Python对比
Nov 20 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
django中cookiecutter的使用教程
Dec 03 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
PO模式在selenium自动化测试框架的优势
Mar 20 Python
Python socket处理client连接过程解析
Mar 18 #Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 #Python
Python如何使用paramiko模块连接linux
Mar 18 #Python
Python selenium页面加载慢超时的解决方案
Mar 18 #Python
Python Selenium 设置元素等待的三种方式
Mar 18 #Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 #Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 #Python
You might like
理解php原理的opcodes(操作码)
2010/10/26 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
浅谈js原生拖放
2016/11/21 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python 爬虫模拟登陆知乎
2016/09/23 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
Python中最大递归深度值的探讨
2019/03/05 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
师范毕业生个人求职信
2013/12/09 职场文书
材料物理专业个人求职信
2013/12/15 职场文书
经贸日语专业个人求职信范文
2013/12/28 职场文书
毕业晚会主持词
2014/03/24 职场文书
小人国观后感
2015/06/11 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书