尝试使用fluentWait类的timeoutException方法时,
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver);
wait.timeoutException("test timeoutException",new MyException("hello"));
获得警告
The method timeoutException(String, Throwable) from the type FluentWait<WebDriver> is not visible
为什么这样?如何使用这种方法?
答案 0 :(得分:0)
如果您查看FluentWait
,您会注意到timeoutExcpetion
具有受保护的访问权限,因此您无法像这样使用它。
我不确定你想要达到的目标,但你通常会像:
一样使用它FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver);
wait.withTimeout(10, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class)
.pollingEvery(1, TimeUnit.SECONDS)
.withMessage("Trololo")
.until(ExpectedConditions.invisibilityOfElementLocated(By.id("id")));
答案 1 :(得分:0)
通过覆盖timeoutException方法,我们可以在等待超时时触发不同的异常。 请考虑以下代码,其中覆盖了timeoutException方法。
FluentWait<WebDriver> wait=new FluentWait<WebDriver>(driver){
@Override
protected RuntimeException timeoutException(String Message,Throwable lastException)
{
throw new MyException("A New Exception instead of TimeOutException");
}
};
wait.ignoring(NoSuchElementException.class)
.withTimeout(2, TimeUnit.SECONDS);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
因此,当发生超时时,将抛出自定义异常而不是TimeoutException
com.example.tests.MyException: A New Exception instead of TimeOutException
at com.example.tests.sampleTest$1.timeoutException(sampleTest.java:40)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228)
at com.example.tests.sampleTest.test(sampleTest.java:45)