Типичным решением этой проблемы является попытка поймать против ожидания.Например, если следующим шагом является нажатие кнопки, которая показывает, как только загрузка завершится:
WebDriverWait wait = new WebDriverWait(driver, LOADING_TIMEOUT);
WebElement webElement;
try {
webElement = wait.until(elementToBeClickable(By.id(id)));
} catch (TimeoutException ex) {
// Close loading window
return;
}
webElement.click();
Однако существует общая проблема, если вы используете неявные тайм-ауты в Selenium.Это работает не слишком хорошо, особенно если неявный тайм-аут длиннее, чем LOADING_TIMEOUT, так как это замедляет цикл опроса в wait.until()
.
. В этом случае самое простое решение - временно уменьшитьнеявное время ожидания:
WebDriverWait wait = new WebDriverWait(driver, LOADING_TIMEOUT);
WebElement webElement;
try {
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
webElement = wait.until(elementToBeClickable(By.id(id)));
} catch (TimeoutException ex) {
// Delay any further interaction until the timeout has been restored
webElement = null;
} finally {
driver.manage().timeouts().implicitlyWait(DEFAULT_TIMEOUT,
TimeUnit.SECONDS);
}
if (webElement != null)
webElement.click();
else
// Close loading window