我在处理超时时遇到了一些问题,因为它似乎并非在所有情况下都有效。我已将超时定义如下:
wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(60))
.pollingEvery(Duration.ofSeconds(1))
.ignoring(NoSuchElementException.class);
现在,当我想等到页面上出现一个元素时,我使用这段代码:
wait.until(ExpectedConditions.presenceOfElementLocated(locator));
它适用于大多数情况(等待元素并在 60 秒后超时),但最近我们遇到了一些页面卡住加载的问题(在左下角有一条消息等待 ...页)。发生这种情况时,我意识到这段代码不能正常工作。它不会在 60 秒后超时,而是在 10 分钟后超时。
编辑:实际上,试图进一步调查我的问题,我意识到它确实来自另一行也包含等待的代码:
wait.until(ExpectedConditions.elementToBeClickable(locator));
基本上,我单击重定向到另一个页面的链接,等待按钮出现,等待按钮可点击,然后单击按钮。所以它检测到按钮存在,但它会等待它是可点击的,并且在 60 秒后不会超时。
所以当我定义我的驱动程序时,我添加了以下行:
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
在控制台中,我看到以下行: Timed out received message from renderer: 60.000
但是我如何捕捉到这个异常呢?我试图用 try/catch 来包围我的等待,但它不起作用。
try {
wait.until(ExpectedConditions.elementToBeClickable(locator));
} catch (Exception e) {
logger.info("TEST");
throw new TimeoutException("element " + locator.toString() + " not found on the page");
}
我该怎么做?谢谢。