背景:
为了提高脚本的稳定性,我们需要在脚本中增加等待时间,比如到某个指定页面,要等待页面完全加载出来后,才能找到页面上我们想要的元素,尽可能避免 元素找不到情况;
三种等待方式介绍
强制等待
Thread.sleep(3000);
// eg:
public static native void sleep(long millis) throws InterruptedException;
最最最最容易 ,被大家常用的一种等待方法,但不推荐:
1.固定休眠时间设置,Java的Thread类里提供了休眠方法sleep,导入包后就能使用;
2.时间以毫秒 为单位;
3.以上执行到此时 不管什么线程就固定的等待三秒之后再接着执行后面的操作;
4.作用范围:仅作用于当前方法,当前操作之后休眠,一般在隐士等待和显示等待都不起作用时使用;
隐式等待(全局隐式等待)
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// eg:
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
AndroidDriver androidDriver=null;
androidDriver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
//源码 selenium框架对外提供的接口,如下:
public interface Timeouts {
WebDriver.Timeouts implicitlyWait(long var1, TimeUnit var3);
WebDriver.Timeouts setScriptTimeout(long var1, TimeUnit var3);
WebDriver.Timeouts pageLoadTimeout(long var1, TimeUnit var3);
}
推荐使用的一种等待方法之一:
1.implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待;
2.implicitlyWait()方法,两个参数:一个接受时间,第二个接受时间度量也就是时间单位,
可以设定查找页面元素的最大等待时间,调用findElement()时没有立刻定位到该元素,则程序会每间隔一段时间 轮询查找( 默认是 0.5s)尝试判断页面DOM中是否存在该元素,设定时间内找到则继续向下执行,若超过设定等待时长(eg:全局的等待10s)还没找到,抛出NoSuchElementException;
<