概述
在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果不做任何处理的话,代码会由于没有找到元素而报错。这时我们就要用到wait,而在Selenium中,我们可以用到一共三种等待,每一种等待都有自己的优点或缺点,如何选择最优的等待方式。
一.强制等待
使用方法:sleep(X),等待X秒后,进行下一步操作。
-
第一种也是使用最简单的一种办法就是强制等待sleep(X),强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。
-
缺点:不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间),如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。
-
优点:使用简单,可以在调试时使用。
-
示例:打开登录页面,等待3秒,进行登录操作,如果3秒内登录页面没有加载完,下一步操作就会报错。
二.隐式等待
使用方法:implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作。
-
第二种方法是隐形等待,其设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。
-
缺点:使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。
-
优点:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
-
示例:打开登录页面,等待页面加载完成后,如果30秒内,页面加载完成,就进行登录操作,不再继续等待,如果30秒内登录页面没有加载完,下一步操作就会报错。
三.显式等待
-
WebDriverWait(显示等待)
-
WebDriverWait是selenium提供得到显示等待模块引入路径
-
from selenium.webdriver.support.wait import WebDriverWait
-
WebDriverWait参数
-
driver: 传入WebDriver实例,即我们上例中的driver
-
timeout: 超时时间,等待的最长时间
-
poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
-
ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常, 则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。
这个模块中,一共只有两种方法until与until_not
-
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False