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的安装
Jul 03 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
用Python的Django框架来制作一个RSS阅读器
Jul 22 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
Python Grid使用和布局详解
Jun 30 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
Python 虚拟环境工作原理解析
Dec 24 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
Search Engine Friendly的URL设计
2006/10/09 PHP
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
function.inc.php超越php
2006/12/09 PHP
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
php正则表达式(regar expression)
2011/09/10 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
Prototype Selector对象学习
2009/07/23 Javascript
javascript 闭包
2011/09/15 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
jQuery事件用法详解
2016/10/06 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
puppeteer库入门初探
2019/01/09 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
教师评优事迹材料
2014/01/10 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
社会实践的活动方案
2014/08/22 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书