在做UI自动化测试中,会经常遇到网络环境不好,导致找不到元素而报错,这时就要用到selenium中的等待。在selenium中共有三种等待方式
time(固定等待)
使用格式:time.sleep(seconds)
这种方式虽然可以自定义等待时间,但是在网络环境良好的情况下,也依然会按照设定的时间继续等待,导致自动化时间延长,不建议使用。
implicitly_wait(隐士等待)
使用格式:driver.implicitly_wait(seconds)
隐士等待实际上是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。
隐士等待同样有缺点,我们都知道js一般都是在body的最后加载,实际上这时页面已经加载完了,却还在等待全部页面加载结束。隐士等待对整个driver周期都起作用,
只需在最开始时设置一次就行,不用当做固定等待来使用,在每一步都加上隐士等待。
WebDriverWait(显示等待)
1、首先要导入WebDriverWait包
from selenium.webdriver.support.wait import WebDriverWait
2、WebDriverWait参数
使用格式:WebDriverWait(driver,timeout,poll_frequency)
WebDriverWait(driver,10,0.5)
driver: 传入WebDriver实例,即我们上例中的driver
timeout: 超时时间,等待的最长时间
poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,
则中断代码,抛出异常。默认只有NoSuchElementException。
这个模块中共有两种方法:until和until not
until:当某元素出现或什么条件成立则继续执行
until not:当某元素消失或什么条件不成立则继续执行
这两个方法需要引入selenium的一个模块
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By