Окно предупреждения Firefox не обнаружено с помощью Selenium WebDriver

ОШИБКА net.serenitybdd.core.Serenity — предупреждение отсутствует (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека)

Я получаю эту ошибку, когда пытаюсь обнаружить предупреждение с помощью этого кода:

Alert alertBox = getDriver().switchTo().alert();

Всплывающее окно с предупреждением появляется, но оно не совсем то же самое, когда я выполняю операцию через Selenium WebDriver и вручную. Это может быть источником проблемы, но я не знаю, почему всплывающее окно отличается.

Предупреждение при выполнении вручную

Предупреждение о завершении работы с Selenium

Это функция, которая вызывает предупреждение:

function confirm_remove() {
    return window.confirm("Alert message");
}

Спасибо за вашу помощь

ОБНОВЛЕНИЕ:

Хорошо, я нашел способ обойти проблему, но не решил ее.

Я попытался вставить ожидания и сон, как вы мне предложили, но это не решило проблему, предупреждение все еще не было обнаружено.

В моем проекте я использую класс Test, который вызывает шаги из моего класса Steps, который вызывает webElements из моего класса Page. Дело в том, что между шагом, который нажимает кнопку «Удалить», и шагом, который управляет предупреждением, Selenium теряет обработку предупреждения. Поэтому я перегруппировал эти два шага, и Selenium, кажется, хорошо справляется с предупреждением.


person Pierrick    schedule 01.03.2016    source источник
comment
Вероятно, нам было бы полезно увидеть код Selenium, который вызывает появление предупреждения.   -  person Breaks Software    schedule 01.03.2016


Ответы (2)


Возможно, вам потребуется добавить код для ожидания отображения предупреждения. Selenium не может определить, завершилось ли выполнение JavaScript.

waitForAlert(WebDriver driver)
{
   int i=0;
   while(i++<5)
   {
        try
        {
            Alert alert = driver.switchTo().alert();
            break;
        }
        catch(NoAlertPresentException e)
        {
          Thread.sleep(1000);
          continue;
        }
   }
}
person MikeJRamsey56    schedule 01.03.2016
comment
Спасибо, я пытался использовать это, но Selenium все еще не может обработать предупреждение. - person Pierrick; 03.03.2016
comment
Попробуйте получить все открытые окна, а затем открыть каждое по очереди и определить, является ли это окном предупреждения. Когда вы найдете предупреждение, продолжите обработку. Не забудьте сохранить исходный дескриптор окна, чтобы вы могли вернуться к нему, когда закончите. См. Как получить обработчики для все открытые окна и браузеры браузеры на селене? - person MikeJRamsey56; 03.03.2016

Чуть более элегантное решение:

WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(ExpectedConditions.alertIsPresent());

Используйте WebDriverWait каждый раз, когда у вас есть динамический элемент, который отсутствует при загрузке страницы, например предупреждение, всплывающее окно, модальное всплывающее окно, скрытый элемент, который становится видимым.

person jpprade    schedule 02.03.2016
comment
Да, вы правы, конечно. Когда что-то работает не так, как ожидалось, я склонен начинать с циклов. Я могу добавить операторы отладки, установить точку останова, а затем осмотреться. Как только все работает, я заменяю циклы действиями. Могу ли я прерваться в ожидании? Наверное.... Старые привычки. - person MikeJRamsey56; 05.03.2016