有时候我们做自动化测试,需要等待。因为我们的下一步执行依赖于上一步的执行结果,因为程序执行的是很快的,上一步执行完毕马上执行下一步,有时候上一步的结果还没加载出来,下一步就执行了,这样就会造成错误,比如No suchElement Exception有时候就是因为这样造成的。selenium里面有三种等待方式,分别是显式,隐式,强制
1.强制等待
先讲强制等待,大家应该都不会陌生,sleep就是强制等待。
Thread.sleep();
强制让浏览器等待X秒,期间不做任何的判断操作,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。
2.隐式等待
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
在X时间内,页面加载完成,进行下一步操作。
其设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。
3.显式等待
WebDriverWait wait=new WebDriverWait(driver,5,0.5);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("x")));
其中x是你需要进行下一步操作的元素。
显式等待的意思,就是判断这个元素是否加载完成,如果在规定的时间加载完成就进行下一步操作,如果在规定的时间没有加载完成就抛出异常。
解释一下刚刚两行代码。
WebDriverWait wait=new WebDriverWait(driver,5,0.5);
//程序一共等待5s,每0.5秒检查一次元素是否加载完成,其实后面的0.5可以