Time will tell.
由于可能会突然地资源受限或网络延迟,导致找不到目标元素。这时测试报告会显示测试失败,这里就需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配, WebDriver 为这种情况提供了隐式等待
和显式等待
两种机制。
1、隐式等待
一旦设置隐式等待时间,就会作用于这个 WebDriver 实例的整个生命周期(对所有的元素查找都生效),设置隐式等待时间后, Webdriver 会在一定时间内持续检测和搜寻 DOM ,以便于查找一个或多个不是立即加载成功并可用的元素。隐式等待的默认时间是 0。 WebDriver 使用implicitly_wait()
来设置等待时间,单位秒。超过等待时间还没找到,就报NoSuchElementException
异常。
# 设置超时时间为10秒
driver.implicitly_wait(10)
2、显式等待
WebDriver 提供了WebDriverWait
类和expected_conditions
模块来实现显式等待。相比隐式等待,显示等待更加智能。显示等待就是设置一个前置条件,在等待时间内,每隔一段时间检查一次前置条件是否满足,满足则执行下一步,超时则报TimeoutException
异常。
3、WebDriverWait类
WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
driver:浏览器驱动实例
timeout:等待时间,单位秒
poll_frequency:每隔多长时间检查一次,默认0.5秒
ignored_exceptions:忽略的异常,默认只有NoSuchElementException
until方法 和 until_not方法:
- until(method, message=''):method指要执行的方法(等待时间内每隔一段时间,执行一次),直到返回值为true,超时则报TimeoutException异常,message将传入异常(message参数可不填)
- until_not(method, message=''):直到返回值为false,其他和until相同
4、expected_conditions模块
expected_conditions
模块提供了多种定义好的前置条件,需要配合 WebDriverWait 使用。
预期等待条件 | 简单说明 |
---|---|
element_to_be_clickable(locat |