等待时间—显示等待

等待时间,在实际过程中有这样的场景,如果同学们原来接触过UFC或者QTB,就会遇到这样的场景,要等待一个元素加载完毕之后,再进行后面的操作。

在Selenium中,也有类似的等待。为什么要等待呢,因为部分页面的资源较多,当浏览器加载页面时,页面上的元素,并不会同时加载,这时候,如果你快速地想去定位这个元素,可能会报错,所以在学习QTB也好,FTB或者Selenium也好,面临最大的问题是什么?对象的识别和元素的定位。

元素定位过程中,Selenium提供了这样的方法,有两种类型,分别是显示等待和隐式等待:

显示等待也就是WebDriverWait类实现,使WebDriver等待某个条件成立时继续执行,否则在达到最大时限之后抛出超时异常。

隐式等待(implicitly_wait),就是等待页面上元素加载完成,超时元素仍然为被加载,则抛出NoSuchElementException。

显示等待

显示等待在webdriver的common包和support.ui包中实现:

selenium.webdriver.common.by.By
selenium.webdriver.support.ui.WebDriverWait
selenium.webdriver.support.expected_conditions

来看具体的WebDriverWait实例如何创建:

# 创建WebDriverWait实例
# driver: 浏览器驱动
# Timeout: 最大超时,默认以秒为单位
# Poll_frequency: 检测时间间隔,默认为0.5s
# Ignored_exceptions: 超时后的异常信息,默认情况抛出NoSuchElementException
# WebDriverWait一般要与until、until_not()方法配合使用

webDriverWait = WebDriverWait(driver, Timeout, Poll_frequency)

WebDriverWait一般要与until、until_not结合使用,用于等待或者不等待某个元素的出现,如果元素等到了,就返回该元素,否则就抛出异常,可以通过try方法来捕获。

看一个实例代码:

如上代码,间隔0.5s检查时间,总共5s的等待时间,寻找ID为kww的元素。很明显,百度搜索页面没有这个元素。以上代码将运行5s,看结果:

正如预期,打开百度搜索页面,5s后报错,Excetion为TimeoutException表示超时异常了。

IT赶路人

专注IT知识分享