selenium元素等待的三种方法
1.强制等待sleep()
使用方法:sleep(X),等待X秒后,进行下一步操作。
使用最简单的一种办法就是强制等待sleep(X),强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。
缺点:不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间)
优点:使用简单,可以在调试时使用
2.隐式等待implicitly_wait()
使用方法:(WebDriver类下的)implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作
说明:首先Implicit Waits默认是等待时间是0,同时隐性等待是对driver起作用,所以只要设置一次即可,比强制等待更智能
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(5) #隐式等待时间设置5秒
#检测搜索框是都存在
try:
print(time.ctime()) #打印当前时间,精确到秒
driver.find_element_by_id("kw").send_keys("python") #id 定位,最多等待5秒
driver.find_element_by_css_selector("#su").click() #最多等待5秒,隐式等待对这里的都起到作用,直接执行完
#如果出现了异常,则打印出来
except NoSuchElementException as mss:
print(mss)
finally:
print(time.ctime())
time.sleep(6)
driver.quit()
3.显示等待 WebDriverWait()
需要先导入from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait()会配合until()和until_not()方法一起使用
使用方法:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None).until(要执行的方法)
driver:浏览器实例
timeout:超时时间,默认已秒为单位
poll_frequency:检测时间间隔,默认0.5秒
ignored_exceptions:报错信息,默认抛出NoSuchElementException
WebDriverWait 类 :until() 和 until_not()
until():可以传两个参数,第一个参数是判断条件,直到第一个参数返回True。第二个参数可以写文字说明。直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常
until_not():可以传两个参数,第一个参数是判断条件,直到第二个参数返回 False。第二个参数可以写文字说明。直到条件不成立返回为真,是当某元素消失或什么条件不成立则继续执行,等待结束。如果超时,抛出TimeoutException,将message传入异常
以下几个条件验证:
3.1验证 title
title_is :验证传入的参数 title 是否等于 driver.title
title_contains :验证传入的参数 title 是否包含于 driver.title
3.2验证元素是否出现,传入的参数都是元组类型的 locator,如(By.ID,'kw')
presence_of_element_located :只要一个符合条件的元素加载出来就通过
presence_of_all_elements_located :必须所有符合条件的元素都加载出来才行
3.3验证元素是否可见:
visibility_of_element_located :传入的参数是元组类型的 locator
invisibility_of_element_located :传入的参数是元组类型的 locator
visibility_of :传入 WebElement,第一个和第三个是一样的
3.4判断某段文本是否出现在某元素中
text_to_be_present_in_element :判断元素的 text
text_to_be_present_in_element_value :判断元素的 value
3.5判断 frame 是否可切入,可传入 locator 元组或者直接传入定位方式:id、name、index 或 WebElement
frame_to_be_available_and_switch_to_it
3.6判断是否有 alert 出现
alert_is_present
3.7判断元素是否可点击,传入 locator
element_to_be_clickable
3.8判断元素是否被选中
element_to_be_selected :传入 WebElement 对象
element_located_to_be_selected :传入 locator 元组
element_selection_state_to_be:传入 WebElement 对象以及状态,相等返回 True,否则返回 False
element_located_selection_state_to_be:传入 locator 以及状态,相等返回 True,否则返回 False
3.9判断一个元素是否仍在 DOM 中,传入 WebElement 对象,可以判断页面是都刷新
staleness_of
3.10WebElement 自带方法
is_displayed() :判断元素是否展示出来
is_enabled() :判断元素是否可操作
selenium元素等待的三种方法的更多相关文章
- 【亲测显式等待】Selenium:元素等待的4种方法
Selenium:元素等待的4种方法 1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐式等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉We ...
- Python selenium —— 一定要会用selenium的等待,三种等待方式解读
发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加 ...
- 【转载】一定要会用selenium的等待,三种等待方式必会
转载地址:http://blog.csdn.net/huilan_same/article/details/52544521,感谢博文,学习了 原文: 发现太多人不会用等待了,博主今天实在是忍不住要给 ...
- appium自动化测试等待的三种方法
第一种 sleep(): 设置固定休眠时间.python 的 time 包提供了休眠方法 sleep() ,导入 time包后就可以使用 sleep()进行脚本的执行过程进行休眠. python # ...
- Selenium:元素等待的4种方法
1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐示等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间.默认值是 ...
- selenium 延迟等待的三种方式
1.最直接普通的方式:这个是设置固定的等待时间 Thread.sleep(1000); 2.显示等待方式(Explicit Wait):就是明确的要等待的元素在规定的时间之内都没找到,那么就 ...
- js中设置元素class的三种方法小结
一.el.setAttribute('class','abc'); 代码如下: .abc { background: red; } test div var div = document.getEl ...
- JavaScript中设置元素class的三种方法小结
第一.element.setAttribute('class','abc'); 第二.element.setAttribute('className', 'abc') : 第三.element.cl ...
- selenium&appium中的三种等待方式---基于python
我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...
随机推荐
- 项目1_001_涉及知识点(Django任务追踪平台)
- iOS UIcollectionView 实现卡牌翻转效果
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- 创建txt文件,并且写入内容
使用fopen的w方式就可以创建一个新的txt文件,如果文件名存在该文件内容会消失. 1. fopen的函数原型:FILE * fopen(const char * path,const char * ...
- Android驱动学习-内部机制_回顾binder框架关键点
内部机制_回顾binder框架关键点server注册服务时, 对每个服务都提供不同的ptr/cookie,在驱动程序里对每个服务都构造一个binder_node, 它也含有ptr/cookie cli ...
- JavaSwing 船只停靠管理可视化(四)
JavaSwing 船只停靠管理可视化(一) JavaSwing 船只停靠管理可视化(二) JavaSwing 船只停靠管理可视化(三) JavaSwing 船只停靠管理可视化(四) JavaSwin ...
- Ubuntu+KVM显卡透传
好久没有更新微博了,最近有点忙,大家见谅啊!今天带来的是我前段时间做的东西,也就是在 Ubuntu下做KVM虚拟机显科透传.(最近人有点懒,其实有几次是有时间更新的,但是就是懒得动,唉!得保持清醒不能 ...
- Java学习日报7.22
//3.2 逆向输出三位整数! 7.22 package 三个和尚比身高1; import java.util.Scanner; public class Demo1{ @SuppressW ...
- Thymeleaf语法总结 | 笔记分享
Thymeleaf语法总结 一.Thymeleaf介绍 Thymeleaf是Spring boot推荐使用的模版引擎,直接以html显示,前后端可以很好的分离. 二.Thymeleaf语法(Thy ...
- Vue概述
Vue.js是一套构建用户界面的渐进式框架,采用自底向上增量开发的设计.Vue的核心库关注于视图(html),不仅易上手,还便于与第三方库或项目整合. 渐进式:一步一步,不是将所有的东西都学完才能使用 ...
- BPOS关于“相邻库存查询”的调整
"相邻库存查询"的应用场景:主要是实现门店间,相互查看商品库存状况,但出于公司对门店的查看权限控制要求,不能一次性查看到相关店铺的所有库存,所以产生了"相邻库存查询&qu ...