selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

强制等待:sleep()

  1. import time

  2. sleep(5) #等待5秒

设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。

缺点:不智能,使用太多的sleep会影响脚本运行速度。

隐式等待:implicitly_wait()

driver.implicitly_wait(10) #隐式等待10秒

由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。如果超出了设置时间的则抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。

显示等待:WebDriverWait()

python 复制代码
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
python 复制代码
需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块
  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔步长,默认为0.5s
  • ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

与until()或者until_not()方法结合使用

python 复制代码
WebDriverWait(driver,10).until(method,message="")
#调用该方法提供的驱动程序作为参数,直到返回值为True
 
WebDriverWait(driver,10).until_not(method,message="")
#调用该方法提供的驱动程序作为参数,直到返回值为False

在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False.

WebDriverWait与expected_conditions结合使用

python 复制代码
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
 
wait = WebDriverWait(driver,10,0.5)
element =waite.until(EC.presence_of_element_located((By.ID,"kw"),message="")
# 此处注意,如果省略message="",则By.ID外面是两层()

expected_conditions类提供的预期条件判断的方法

显示等待,自定义等待条件

python 复制代码
#设置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
互联网杂货铺29 分钟前
python+pytest 接口自动化测试:参数关联
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
白水先森29 分钟前
牵引线标注:让地图信息更清晰的ArcGIS Pro技巧
开发语言·javascript·经验分享·arcgis·arcgispro
1024小神1 小时前
更改github action工作流的权限
前端·javascript
Epicurus1 小时前
JavaScript无阻塞加载的方式
前端·javascript
1024小神1 小时前
tauri程序使用github action发布linux中arm架构
前端·javascript
LAM LAB1 小时前
【VBA】WPS/PPT设置标题字体
javascript·powerpoint·vba·wps
JYeontu1 小时前
实现一个带@功能的输入框组件
前端·javascript·vue.js
前端大卫2 小时前
Echarts 饼图的创新绘制技巧(附 Demo 和源码)
前端·javascript·echarts
jeff渣渣富2 小时前
使用 AST 处理输入字段的关联计算问题
前端·javascript
百度地图开放平台2 小时前
LBS 开发微课堂|智能调度API升级:解决循环取货场景下的调度难题
前端·javascript