我目前有一个循环,通过总共16个网站URL,每次检查每个主页中的特定文本。有时会出现一些网站需要超过指定的加载时间,从而导致失败并停止执行的情况。我想要的是循环继续直到完成,然后如果在执行期间至少发生一次故障则整个测试失败,如果没有失败则通过整个测试。
以下是用于设置和检查加载时间的实际代码。请告知如何修改以下代码,以便我可以获得上面所需的结果?
public static Boolean isTextPresentAfterWaitOnServer(final String strStringToAppear, RemoteWebDriver rwd, String strLoc){
try{
Wait<WebDriver> wait = new FluentWait<WebDriver>(rwd)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(2, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
Boolean foo = wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(final WebDriver webDriver) {
return (webDriver.getPageSource().indexOf(strStringToAppear) >= 0);
}
});
return foo;
}
catch(TimeoutException e){
throw new RuntimeException("Could not find text " + strStringToAppear +" on server "+strLoc +" - " + e);
}
};
答案 0 :(得分:0)
我没有使用过FluentWait所以不确定你是否可以忽略超时异常,就像你正在为nosuchelementexception做的那样。如果它有,那么我猜你也可以忽略它。或者不是提高runtimeexception,创建一个errorCounter,在catch块中继续增加它,在finally块中根据它的值引发一个异常。
答案 1 :(得分:0)
我认为在您的情况下,简单Asser.fail(String message);非常有帮助。请尝试以下代码:
public static Boolean isTextPresentAfterWaitOnServer(final String strStringToAppear, RemoteWebDriver rwd, String strLoc){
(...)
}
catch(TimeoutException e){
throw new RuntimeException("Could not find text " + strStringToAppear +" on server "+strLoc +" - " + e);
}
};
并在测试方法中捕获此RuntimeExecption:
@Test
public void someTestMethod(){
try{
(...)
isTextPresentAfterWaitOnServer("strStringToAppear", rwd, "strLoc");
}catch(RuntimeException re){
Assert.fail(re.getMessage());
} //you can specify another exceptions
}
我在JUnit中使用fail并且工作正常(所有测试用例都在运行)。可能在testNG中具有相同的行为。