Как дождаться индикатора выполнения с помощью веб-драйвера в Java

#java #selenium #selenium-webdriver

#java #селен #selenium-webdriver

Вопрос:

Действие: если я нажму на любую ссылку, индикатор выполнения отобразится после полной загрузки страницы, а затем этот индикатор выполнения будет скрыт

Сомнения: мы хотим автоматизировать вышеуказанное действие, как я могу проверить, завершено ли выполнение действия или нет

ниже приведен HTML-код

как только я нажимаю на ссылку, html выглядит так

 <div id ="divProgress" class="progresswindow" style="display: block;"></div>
  

затем завершенная загрузка страницы html выглядит следующим образом

 <div id ="divProgress" class="progresswindow" style="display: none;"></div>
  

итак, как я могу проверить, завершен этот индикатор выполнения или нет, в настоящее время я использую Thread.sleep(), но через некоторое время веб-драйвер вызывает исключение

 Other element would receive the click: <div id="divProgress" class="progresswindow" style="display: block;">...</div>
  

Пожалуйста, предоставьте предложение, как это обрабатывать с явным ожиданием

Ответ №1:

Вместо Thread.sleep() того, чтобы ждать какого-либо условия, вы должны использовать классы WebDriverWait и ExpectedConditions .

В вашем случае вам следует подождать, пока div с индикатором выполнения не станет невидимым:

     long timeoutInSeconds = 30;
    new WebDriverWait(driver, timeoutInSeconds)
  .until(ExpectedConditions.invisibilityOfElementLocated(By.id("divProgress")));
  

Как вы обнаружили, Thread.sleep() он слишком хрупкий, чтобы его можно было безопасно использовать в тестовом коде — вы всегда должны ждать чего-то, что вы можете проверить. В качестве бонуса ваши тесты, вероятно, будут выполняться намного быстрее!

Комментарии:

1. Благодаря @alb-i986, который предложил изменения, которые значительно улучшили публикацию (я не знал о встроенных ожидаемых условиях), но изменения были понижены в рейтинге. Тем не менее, они определенно улучшили сообщение!

2. добро пожаловать — спасибо , что приняли мои предложения 🙂