> 技术文档 > Selenium三大等待过程

Selenium三大等待过程


软件测试资料领取:[内部资源] 想拿年薪40W+的软件测试人员,这份资料必须领取~

软件测试面试刷题工具领取:软件测试面试刷题【800道面试题+答案免费刷】

使用场景:有时候当我们操作页面元素时,需要等待这个过程才能操作成功。

做Ui自动化的时候,考虑到稳定性:多次运行同一脚本,都能够保证它是成功的。

一、强制等待:sleep(秒) 

比如sleep(10),就必须等待10秒,才能执行下一步。简单粗暴,不过代码将会有很多sleep,冗余度会提高。

 二、智能等待:显性等待

专门针对特定元素而设置的等待,在规定的时间内找到元素,找到了就执行下一步,没有找到抛出异常(TimeoutException)。效率高,可以自定义条件。from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until(条件)WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until_not(条件)
selenium3当中,每一个条件是以类的形式实现的。每一个类都有__init__, __call__selenium4当中,每一个条件是以函数的形式实现的。每一个函数都有一个_predicate内部函数。闭包
使用显性等待的时候,先确定你的条件是什么。然后再去使用显性等待。等待效果只有一次,不像隐性等待全局可用。比较多的用法:显性等待 + 短暂的sleep常用的条件:visibility_of_element_located(locator) --- locator对应的元素是可见的element_to_be_clickable(mark) --- mark对应的元素可点击
三、智能等待:隐形等待
调用find_element/find_elements方法的时候,如果元素没找到不会立马报错,会主动使用隐性等待,达到最大等待时间后,抛出异常。一个会话(浏览器打开到关闭这个过程)当中,只需要调用一次,全局可用。没有办法对精准度的元素进行定位,会影响实际的运行效率。
三种方法一起使用代码如下:
1 import time2 from selenium import webdriver3 from selenium.webdriver.support.wait import WebDriverWait4 from selenium.webdriver.support import expected_conditions as EC56 driver = webdriver.Chrome()7 driver.get(\"https://www.baidu.com\")8 #隐形等待9 driver.implicitly_wait(10)10 driver.maximize_window()11 # 显性等待12 #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素13 el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element(\'xpath\',\'//a[text()=\"hao123\"]\'),message=\"没找到元素\")14 el.click()15 # 强制等待16 time.sleep(3)17 driver.quit()
显示等待结合预期条件判断代码如下:
1 import time2 from selenium import webdriver3 from selenium.webdriver.support.wait import WebDriverWait4 from selenium.webdriver.support import expected_conditions as EC56 # driver = webdriver.Chrome()7 # driver.get(\"https://www.baidu.com\")8 # #隐形等待9 # driver.implicitly_wait(10)10 # driver.maximize_window()11 # # 显性等待12 # #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素13 # el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element(\'xpath\',\'//a[text()=\"hao123\"]\'),message=\"没找到元素\")14 # el.click()15 # # 强制等待16 # time.sleep(3)17 # driver.quit()18 #19 driver = webdriver.Chrome()20 driver.maximize_window()21 driver.get(\"https://www.baidu.com\")2223 locator = (\'xpath\',\'//a[text()=\"新闻\"]\')24 # WebDriverWait()一般与 until()或 until_not()方法配合使用25 # until(),直到返回值为 True。26 # until_not(),直到返回值为 Flase。27 # 判断元素是否可见28 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可见,如果超过设置时间仍检测不到,则抛出异常。29 WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator),message=\"元素可见\")30 # 判断元素是否可以点击31 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可点击,如果超过设置时间仍检测不到,则抛出异常。32 WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable(locator))33 # 判断元素是否存在34 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。35 WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))36 driver.find_element(*locator).click()37 # 判断标题是否不存在38 # 在设置时间内,默认每隔一段时间检测一次标题是否不存在,如果超过设置时间仍检测不到,则抛出异常。39 WebDriverWait(driver,5,0.5).until_not(EC.title_is(\"123123\"),message=\"标题不是这个\")40 time.sleep(3)41 driver.quit()

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群:​,里面有各种软件测试资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人!!!作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

软件测试面试刷题工具【800+面试题+答案免费刷】

测试文档模板

图片

测试简历模板

图片

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

汽车资讯