您的位置:首页 > 其它

testng如何实现等待(软等待、智能等待)

2017-06-22 16:07 260 查看
今天给大家介绍一种等待方法,我们之前写的等待,如:Thread.sleep(1000);我们称之为硬等待,也就是说你设置等待多长时间就是多长时间,这种等待对于做自动化来说,特别浪费时间,我们一般很少用到。

假如在做自动化过程中,有的页面可能由于服务器或网速等等原因你是不知道它什么时候才会加载出来的,这种情况你如果使用硬等待,用例失败的几率特别大,所以这种方法就不可取了,我今天要给大家介绍一种智能等待的方法,也就是说用上这个方法之后,它会在你设定的超时范围内去轮询等待界面上是否出现了这个元素,一旦出现立刻执行动作;如果在指定超时范围之内没有出现,则抛出异常。这样就大大减少了我们的等待时间,节约时间就是节约成本!

一、首先要写一个判断元素是否存在的方法,代码如下:

// 判断元素是否可用
public static Boolean waitElementIsEnabledBy(By by) {
try {
WebDriver waitDriver = driver;
long waitTime = 20;
waitDriver.manage().timeouts().implicitlyWait(waitTime, TimeUnit.SECONDS);
(new WebDriverWait(waitDriver, waitTime)).until(ExpectedConditions.elementToBeClickable(by));
return true;
} catch (Exception e) {
return false;
}
}


ps:waitDriver=driver(这个driver是我操作用到的driver),要把你的driver传给waitDriver,否则无法实现控制;这里我给的超时时间waitTime是20s

二、实现智能操作,举例如下:

waitElementIsEnabledBy(By.xpath("//*[@id='allheader']/div/div[1]/div/div/div[2]/a"));
driver.findElement(By.xpath("//*[@id='allheader']/div/div[1]/div/div/div[2]/a")).click();// 点击退出


ps:waitElementIsEnabledBy是我们判断元素是否存在的方法,以上是我判断一个退出按钮是否存在,如果存在立刻执行点击动作,如果不存在,超出20s后则抛出异常,返回false

提示:只需要在你不知道某个页面需要加载多长时间的地加此等待就可以,也可以把其他操作的硬等待也用此方法替换掉,提升自动化的速度和质量,节约时间和成本!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息