#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. добро пожаловать — спасибо , что приняли мои предложения 🙂