我在处理超时方面遇到一些问题,因为它似乎并非在每种情况下都有效。我将超时定义如下:
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);
在控制台中,我看到以下行: 超时从渲染器接收消息: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");
}
我该怎么办?谢谢。
答案 0 :(得分:0)
您需要注意以下几点:
click()
。wait.until(ExpectedConditions.presenceOfElementLocated(locator))
在 60秒后没有超时,但在 10分钟后仍未超时的原因可能是由于使用WebDriverWait,您还配置了Implicit Wait,并且根据documentation混合使用Implicit Wait和Explicit Wait可能会导致unpredictable wait times 要配置pageLoadTimeout,可以使用以下代码块:
代码块:
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS);
try{
driver.get("https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl");
}catch(WebDriverException e){
System.out.println("WebDriverException occured");
}
driver.quit();
控制台输出:
INFO: Detected dialect: W3C
[1563377008.449][SEVERE]: Timed out receiving message from renderer: 1.999
[1563377008.450][SEVERE]: Timed out receiving message from renderer: -0.001
[1563377008.461][SEVERE]: Timed out receiving message from renderer: -0.012
[1563377010.466][SEVERE]: Timed out receiving message from renderer: 1.998
[1563377010.467][SEVERE]: Timed out receiving message from renderer: -0.001
[1563377010.476][SEVERE]: Timed out receiving message from renderer: -0.010
WebDriverException occured