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,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

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

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

相关推荐
伍哥的传说28 分钟前
Radash.js 现代化JavaScript实用工具库详解 – 轻量级Lodash替代方案
开发语言·javascript·ecmascript·tree-shaking·radash.js·debounce·throttle
前端程序媛-Tian1 小时前
【dropdown组件填坑指南】—怎么实现下拉框的位置计算
前端·javascript·vue
iamlujingtao1 小时前
js多边形算法:获取多边形中心点,且必定在多边形内部
javascript·算法
嘉琪0011 小时前
实现视频实时马赛克
linux·前端·javascript
爱分享的程序员2 小时前
前端面试专栏-前沿技术:30.跨端开发技术(React Native、Flutter)
前端·javascript·面试
超级土豆粉2 小时前
Taro 位置相关 API 介绍
前端·javascript·react.js·taro
柯北(jvxiao)2 小时前
搞前端还有出路吗?如果有,在哪里?
前端·程序人生
草履虫建模3 小时前
RuoYi-Vue 项目 Docker 容器化部署 + DockerHub 上传全流程
java·前端·javascript·vue.js·spring boot·docker·dockerhub
阿丽塔~4 小时前
【vue3+vue-pdf-embed】实现PDF+图片预览
javascript·vue.js·pdf
zhuà!6 小时前
taro+react重新给userInfo赋值后,获取的用户信息还是老用户信息
javascript·react.js·taro