selenium自动化之显式等待和EC(expected_conditions)模块
很多人都有这种经历,selenium脚本当前运行没问题,过了一段时间再运行就报错了,然后过几天又好了。其中的原因估计60%的人都知道,是因为元素加载这块有问题。通常的解决方案就是加上sleep或者隐式等待(implicitly_wait),后面发现这种办法太浪费时间了,测试用例一旦过多就要抓狂了,并且还是不太稳定。
其实,要想提升selenium脚本的稳定性和速度,显式等待结合EC(expected_conditions)模块是个非常不错的选择,下面是python语言的写法(人生苦短,我用python),大家可以进行二次封装。
#!/usr/bin/python3# -*- coding: utf-8 -*-# @创建时间: 2018/10/16 09:01# @创建人 : Kevin# @IDE : PyCharmfrom selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()driver.get('url')
""" driver不用多说 10表示最大的超时时间(s) 0.1表示查询元素的频率"""
'''判断title是否是一致,返回布尔值'''WebDriverWait(driver,10,0.1).until(EC.title_is("title_text"))
'''判断title是否与包含预期值,返回布尔值'''WebDriverWait(driver,10,0.1).until(EC.title_contains("title_text"))
'''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回元素'''WebDriverWait(driver,10,0.1).until(EC.presence_of_element_located((locator)))
'''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''WebDriverWait(driver,10,0.1).until(EC.visibility_of_element_located((locator)))
'''判断元素是否可见,如果可见就返回这个元素'''WebDriverWait(driver,10,0.1).until(EC.visibility_of(driver.find_element(locator)))
'''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''WebDriverWait(driver,10,0.1).until(EC.presence_of_all_elements_located((locator)))
'''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''WebDriverWait(driver,10,0.1).until(EC.visibility_of_any_elements_located((locator)))
'''判断指定的元素中是否包含了预期的字符串,返回布尔值'''WebDriverWait(driver,10,0.1).until(EC.text_to_be_present_in_element((locator),'预期的text'))
'''判断指定元素的value属性值中是否包含了预期的字符串,返回布尔值(注意:只是value属性)'''WebDriverWait(driver,10,0.1).until(EC.text_to_be_present_in_element_value((locator),'预期的text'))
'''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''WebDriverWait(driver,10,0.1).until(EC.frame_to_be_available_and_switch_to_it(locator))
'''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''WebDriverWait(driver,10,0.1).until(EC.invisibility_of_element_located((locator)))
'''判断某个元素是否可见并且是可点击的,如果是的就返回这个元素,否则返回False'''WebDriverWait(driver,10,0.1).until(EC.element_to_be_clickable((locator)))
'''等待某个元素从dom树中移除'''WebDriverWait(driver,10,0.1).until(EC.staleness_of(driver.find_element(locator)))
'''判断某个元素是否被选中了,一般用在下拉列表'''WebDriverWait(driver,10,0.1).until(EC.element_to_be_selected(driver.find_element(locator)))
'''判断某个元素的选中状态是否符合预期'''WebDriverWait(driver,10,0.1).until(EC.element_selection_state_to_be(driver.find_element(locator),True))
'''判断某个元素的选中状态是否符合预期'''WebDriverWait(driver,10,0.1).until(EC.element_located_selection_state_to_be((locator),True))
'''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''accept = WebDriverWait(driver,10,0.1).until(EC.alert_is_present())
selenium自动化之显式等待和EC(expected_conditions)模块的更多相关文章
- selenium 找不到元素 (显式等待 和隐式等待的区别)
selenium自动化页面元素不存在异常发生的原因有一下几点: (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功.此时可以加载页面等待时间. (2)查到的元素没有在当前的ifra ...
- selenium—隐式等待和显式等待
一.隐式等待和显式等待的区别 隐式等待:是整个页面的等待.设置一个最长的等待时间,在规定时间内整个页面加载完成,则执行下一步,否则继续等待直到最长等待时间结束. 显式等待:是针对某个元素的等待.在设置 ...
- Selenium系列(六) - 强制等待、隐式等待、显式等待
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- selenium(5)-解读强制等待,隐式等待,显式等待的区别
背景 为什么要设置元素等待 因为,目前大多数Web应用程序都是使用Ajax和Javascript开发的:每次加载一个网页,就会加载各种HTML标签.JS文件 但是,加载肯定有加载顺序,大型网站很难说一 ...
- selenium 隐式等待与显式等待
1.隐式等待:driver.implicitly_wait() driver = webdriver.Chrome()driver.implicitly_wait(10) #获取元素时最多会等 ...
- python+selenium 自动化测试——显式等待详解
1.前言 之前有提到过等待函数,等待函数分为:强制等待(sleep).隐式等待(implicitly_wait),显示等待(WebDriverWait),这次以显示等待方式专门做一次总结,因为我个人是 ...
- Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...
- 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待
一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.seleniu ...
- selenium测试(Java)-- 显式等待(九)
转自:https://www.cnblogs.com/moonpool/p/5668571.html 显式等待可以使用selenium预置的判断方法,也可以使用自定义的方法. package com. ...
随机推荐
- oracle 通配符及regexp_count函数说明
通配符 通配符描述示例 %:匹配包含零个或更多字符的任意字符串.WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名. ...
- Telnet配置
一.环境 路由 IP:192.168.56.2 本地云 IP:192.168.56.1 二.认证模式 AAA模式 认证 授权 计费的安全技术 当配置用户界面的认证方式为AAA时, 用户登录设备时需要首 ...
- HUD 1288 Hat's Tea(反向的贪心,非常好的一道题)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1288 Hat's Tea Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1016 Prime Ring Problem(素数环问题)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...
- 轻量ORM-SqlRepoEx (九)与Dapper共舞
Dapper就另一个轻量ORM,Dapper及其扩展解决了数据访问端的大部门问题,提供了如数据事务管理.缓存等支持.SqlRepoEx的重点解决了Lambda转换成SQL语句,使SQL使用强类型编写, ...
- Reading Notes : 180211 概述计算机
读书<计算机组成原理> <鸟哥的Linux私房菜 基础篇> 本章介绍电子计算机概念以及发展历史和发展趋势,内容摘自<计算机组成原理> <鸟哥的Linux私房 ...
- iOS:UICollectionView流式布局及其在该布局上的扩展的线式布局
UICollectionViewFlowLayout是苹果公司做好的一种单元格布局方式,它约束item的排列规则是:从左到右依次排列,如果右边不够放下,就换一行重复上面的方式排放,,,,, 常用的 ...
- 关于Hibernate的部分知识总结
[部分内容参考地址:https://www.cnblogs.com/woniu2219/p/7111857.html] Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对J ...
- iOS 12 真机调试 Xcode 9 提示 Could not locate device support files.
升级 iOS 12 之后,使用 Xcode 9 真机调试会提示错误: Could not locate device support files. This iPhone 6 Plus is runn ...
- MongoDB 4.0.6 Manual
General mongod options: -v [ --verbose ] [=arg(=v)] be more verbose (include multiple times for more ...