2

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

2 回答 2

1

我没有使用 FluentWait,所以不确定你是否可以像处理 nosuchelementexception 一样忽略超时异常。如果有,那么我想你也可以忽略它。或者,不是引发 runtimeexception,而是创建一个 errorCounter,在 catch 块中不断增加它,并在 finally 块中根据其值引发异常。

于 2013-11-12T07:56:14.253 回答
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 中使用失败并且工作正常(所有测试用例都在运行)。可能在 testNG 中具有相同的行为。

于 2013-11-12T08:25:54.007 回答