selenium中的显示等待,隐示等待,强制等待(转)

本文深入探讨了自动化测试中三种等待策略:time.sleep、implicitly_wait及WebDriverWait的使用场景与优劣对比。通过生动的比喻解释了隐式等待与显式等待的区别,并详细解析了WebDriverWait的参数与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要内容转自如下两个博客:

https://www.cnblogs.com/gracemm/p/8487464.html

https://www.cnblogs.com/wangguoyuan-09/p/7592978.html

 

 

time(固定等待)

在开发自动化框架过程中,最忌讳使用Python自带模块的time的sleep方法进行等待,虽然可以自定义等待时间,但当网络条件良好时,依旧按照预设定的时间继续等待,导致整个项目的自动化时间无限延长。不建议使用。(注:脚本调试过程时,还是可以使用的,方便快捷)

 

 

implicitly_wait(隐式等待)

隐式等待实际是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。这样的隐式等待会有个坑。我们都知道js一般都是放在我们的body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们却还在等带全部页面加载结束。隐式等待对整个driver周期都起作用,在最开始设置一次就可以了。不要当做固定等待使用,到那都来一下隐式等待。

 

 

相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。

      隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,如果Element或数组没有马上被发现的话。

默认设置是0。一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。

 

 

WebDriverWait(显示等待)

WebDriverWait是selenium提供的显示等待模块引入路径

 

 

显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码。

     在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。

 

 

 

4、显示等待和隐式等待的区别:

你男朋友约你去电影院看电影的时候,在楼下等你:
隐式等待
:就是等你化好妆,三十分钟内能下楼就行,但是一定是先化好妆才能下来
等待就不一样了。你男朋友隔五分钟打一次电话,问你好了没?然后说你先下来吧,到我车上化妆,然后人先下去,再车上继续化妆打扮,到电影院时候化妆完成。
你说哪个省时间?
当然是显式等待!!!你就是那个元素,化妆打扮是页面上其它元素。

 

 

 

详解webDriverWait():

    WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until(self,method,message=) 或者

    WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until_not(self,method,message=)

self, 函数本身,在实际使用的时候不需要输入

driver, webdriver的驱动程序,如(IE、FireFox、chrome、safari等)

timeout,超时时间,默认以秒为单位 poll_frequency,休眠时间(步长)的间隔,默认为0.5秒,即检测元素是否存在的频率

ignored_exceptions, 超时后的异常信息,默认情况下抛 “NoSuchElementException",大家可以定义忽略的异常信息

WebDriverWait一般由until或until_not配合使用

until(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值不为False

until_not(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值为False

 

★实例

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.common.exceptions import NoAlertPresentException,TimeoutException,NoSuchElementException 

driver=webdriver.Firefox() 
driver.get("http:www.baidu.com") 
WebDriverWait(driver,10,1,NoSuchElementException).until(lambda driver:driver.find_element_by_name("d_status"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值