失败后继续执行然后失败整个测试如果至少有一次失败

时间:2013-11-12 04:54:45

标签: java selenium

我目前有一个循环,通过总共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);
    }
    };

2 个答案:

答案 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中具有相同的行为。