Задать вопрос
YuliyaPavlova
@YuliyaPavlova
Тестировщик

Как научить автотест работать с alert окнами?

Начала писать автотесты на java + Selenium WebDriver и возникла проблема, никак не могу найти способ объяснить тесту, что делать при появлении alert-окна. Может кто-то уже сталкивался с таким? Нужно, чтобы тест при выводе данного окна нажал ОК и подтвердил совершение действия.
4eb7010b910c4f7ca46356d5207e7fc9.jpg
На картинке показано окно, которое появилось при нажатии на иконку "Корзина", именно в нем нужно подтвердить удаление. Код для иконки удаления тоже есть на скриншоте.
Если нужны какие-то специфические функции из сторонних библиотек, то установлю, главное - решить проблему.
Заранее спасибо всем откликнувшимся!

PS Программист я плохой (от слова "никакой"), автоматизировать и программировать учусь одновременно, поэтому очень прошу помочь развернутым и разъясненным ответом.
  • Вопрос задан
  • 3234 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
Вам нужно сюда: docs.seleniumhq.org/docs/03_webdriver.jsp#popup-di...
Сначала вы должны переключиться в этот Alert, а потом совершить с ним нужные действия.
Ответ написан
Концептуально вам понадобиться два свитча с екшенами ОК и Cancel:

driver.switchTo().alert().dismiss();
driver.switchTo().alert().accept();
Ответ написан
Комментировать
@Kenshir007
Я очень долго мучился с Аллертами принципе. Проблема в том, что если в проекте используются Иплицидные ожидания, то драйвер не всегда понимает появился ли алерт. Я решил эту проблему таким методом:
public void acceptPopUp() {

Integer tries = 0;
Integer maxTries = 30;

while (tries < maxTries) {
tries++;

try {
disableImplicityWait();
waitInSeconds(2);
Alert alert = driver.switchTo().alert();
if (alert != null && alert.getText().length() > 1) {
alert.accept();
enableImplicityWait();
return;
}
waitInSeconds(1);

} catch (Exception e) {
e.getSuppressed();
}
}
}
private void disableImplicityWait() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}

private void enableImplicityWait() {
driver.manage().timeouts().implicitlyWait(45, TimeUnit.SECONDS);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы