webdriver中的三种等待

1、强制等待:sleep()

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

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

2、隐式等待:implicitly_wait()

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

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

3、显示等待:WebDriverWait()

需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块,单独针对某个特定元素设置的等待时间,可以根据不同元素设置不同的等待条件,driver会在查询周期内去查询该元素是否准备好,如果ok则继续往下,如果不ok的话则继续等待直到超时为止。

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

WebDriverWait(driver,10).until(method,message="")

调用该方法提供的驱动程序作为参数,直到返回值为True:

WebDriverWait(driver,10).until_not(method,message="")

调用该方法提供的驱动程序作为参数,直到返回值为False

在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。

在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False。

2 )WebDriverWait与expected_conditions结合使用

  1. from selenium.webdriver.support import expected_conditions as EC

  2. from selenium.webdriver.common.by import By

  3. wait = WebDriverWait(driver,10,0.5)

  4. element =waite.until(EC.presence_of_element_located((By.ID,"kw")),message="")

  5. # 此处注意,如果省略message=“”,则By.ID外面是三层()

最初执行的代码一开始是这样写:presence_of_element_located(By.ID, "su"),这样相当于取到了3个参数(self, By.ID, "su"),而presence_of_element_located类中__init__()方法取的确实是2个参数(self, locator),其中locator调用的是一个tuple(元组)。

该元组(By.ID, "su")作为一个整体,对应相当于1个参数,加上类实例化代表自身的self参数,正好就是2个参数。

因此,执行代码正确的写法为:presence_of_element_located((By.ID, "su")),即需要嵌套两层英文圆括号。

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

  1. #设置等待

  2. wait = WebDriverWait(driver,10,0.5)

  3. #使用匿名函数

  4. wait.until(lambda diver:driver.find_element_by_id('kw'))

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

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

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

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
selenium三种常用的等待方式,分别是隐式等待、显式等待和固定等待。 1. 隐式等待:使用隐式等待可以在查找元素时设置一个最大等待时间,如果在规定时间内找到了元素,则立即执行后续操作;如果超过了最大等待时间仍未找到元素,则抛出NoSuchElementException异常。隐式等待是全局性的,对整个WebDriver的生命周期都起作用。 ```python from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # 设置隐式等待时间为10秒 driver.get("https://www.example.com") element = driver.find_element_by_id("myElement") # 在10秒内查找id为myElement的元素 ``` 2. 显式等待:使用显式等待可以在特定条件满足时等待一段时间,然后再执行后续操作。可以根据需要设置等待的最大时间和轮询的时间间隔,并指定等待的条件。如果在最大等待时间内满足了条件,则立即执行后续操作;如果超过了最大等待时间仍未满足条件,则抛出TimeoutException异常。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://www.example.com") wait = WebDriverWait(driver, 10) # 设置显式等待时间为10秒 element = wait.until(EC.presence_of_element_located((By.ID, "myElement"))) # 在10秒内等待id为myElement的元素出现 ``` 3. 固定等待:固定等待是一种简单的等待方式,它会在执行后续操作之前暂停一段固定的时间。可以使用time模块的sleep函数来实现固定等待。 ```python import time from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.example.com") time.sleep(5) # 暂停5秒 element = driver.find_element_by_id("myElement") # 在暂停5秒后查找id为myElement的元素 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值