Selenium三种等待方式,最难的WebDriverWait():显示等待的用法,一看就懂

Selenium 三种等待方法 WebDriverWait()最难使用,下面介绍一下

先说一下区别

sleep(): 强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。
implicitly_wait():隐式等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
WebDriverWait():显示等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为 0.5s,默认抛出异常为:NoSuchElementException

看个例子

#-- codeing=utf-8 --
#@Time:2021/3/20 11:57
#@Author:zsw
#@File:webdrivewait演示代码.py
#@Software:PyCharm

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get(“http://www.baidu.com/”)
locator = (By.ID, “kw”)

try:
ele = WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator))
driver.find_element_by_id(“kw”).send_keys(‘abc\n’)
time.sleep(2) # 为了看效果
except:
print(“ele can’t find”)
finally:
print(“无论如何都会关闭页面!”)
driver.quit()

"""
显示等待:WebDriverWait()
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
1
需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块

driver: 传入WebDriver实例,即我们上例中的driver
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,
则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。
“”"
WebDriverWait 方法后面有两种等待方式

728 x 116
895 x 143

until

method: 在等待期间,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是Falsemessage: 如果超时,抛出TimeoutException,将message传入异常
until_not

与until相反,until是当某元素出现或什么条件成立则继续执行, until_not是当某元素消失或什么条件不成立则继续执行,参数也相同,不再赘述。
看了以上内容基本上很清楚了,调用方法如下:

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)1
这里需要特别注意的是 until 或 until_not 中的可执行方法 method 参数,很多人传入了 WebElement 对象,如下:

WebDriverWait(driver, 10).until(driver.find_element_by_id(‘kw’)) # 错误1
这是错误的用法,这里的参数一定要是可以调用的,即这个对象一定有 call() 方法,否则会抛出异常:

TypeError: ‘xxx’ object is not callable1
在这里,你可以用 selenium 提供的 expected_conditions 模块中的各种条件,也可以用 WebElement 的 **is_displayed() 、is_enabled()、is_selected() **方法,或者用自己封装的方法都可以。

作者:zzhangsiwei
链接:http://testingpai.com/article/1616220661793
来源:测试派
协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Onesiphorus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值