У меня немного другой подход, чем некоторые другие ответы - если ни один из них не работает для вас, не стесняйтесь попробовать это:
By loadingIndicator = By.xpath("//span[@class='loading']");
boolean loadingFinished = false;
while (!loadingFinished)
{
System.out.println("is loading");
// attempt to find the loading indicator, catch exception if it is not found
try {
WebElement loader = driver.findElement(loadingIndicator);
// check isDisplayed(), set found to true
if (!loader.isDisplayed()) loadingFinished = true;
// handle exception where loadmask no longer exists
} catch (NoSuchElementException e) {
loadingFinished = true;
e.printStackTrace();
}
}
Этот код проверяет наличиеloadmask и обрабатывает NoSuchElementException
, который может возникнуть, если он не существует. Мы устанавливаем loadingFinished
в true
, если loader.isDisplayed()
равно false или если при вызове findElement
в загрузчике возвращается NoSuchElementException
, то есть элемент не существует и загрузка завершена.
Однако, если вы хотите сделать этот код намного проще, вы можете просто использовать класс ExpectedConditions
:
WebDriverWait wait = new WebDriverWait(driver, 30);
// first, wait for the loadmask to be visible to avoid race condition
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='loading']")));
// now, wait for load mask to disappear -- loading complete after this
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//span[@class='loading']")));