Перейти к содержимому

Фотография

Тест с неожиданно возникающими alert попадает в успешно пройденные

Alert WebDriver TestNG

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 Arch

Arch

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Каримов Алексей

Отправлено 06 августа 2015 - 08:02

Окружение WebDriver+Java+TestNG+TeamCity
 
Коллеги возникла странная проблема. Заметил, что если во время теста в окне браузера возникает Alert, то в лог падает ошибка unexpected alert open, но в конечном итоге этот тест не попадет через testlistener в проваленные тесты (через onfailure).
 
Ошибку заметил в другом примере, когда пытался написать метод, ожидающий и сравнивающий текст алерта (уже ожидаемого) с заданным.
Код метода такой:
 
public void alertWait(String text) throws IOException, InterruptedException {
for (int second = 0;; second++) {
if (second >= 15) fail ("error")
try {
alert=driver.switchTo().alert().getText();
assertEquals(alert, text);
break;}
catch (NoAlertPresentException e){}
}
driver.switchTo().alert().accept();
}
 
Ситуация получилась следующая: если текст совпадал, то тест двигался дальше без ошибок. Если же не совпадал, то в лог падало unexpected alert open, тест дальше не шел, но в результатах помечался как успешно пройденный (onSucess).
 
Сталкивался ли кто-нибудь с подобным? Если не затруднит, приведите примеры своих методов ожидания и сравнивания алертов

  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 06 августа 2015 - 08:27

Почитайте  про капабилити unexpectedAlertBehaviour и какие значения она может принимать (дисмисс, ассепт, игнор).



Capabilities.setCapability("unexpectedAlertBehaviour", "ignore");

  • 1

#3 Arch

Arch

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Каримов Алексей

Отправлено 06 августа 2015 - 10:30

 

Почитайте  про капабилити unexpectedAlertBehaviour и какие значения она может принимать (дисмисс, ассепт, игнор).



Capabilities.setCapability("unexpectedAlertBehaviour", "ignore");
Спасибо за идею, я почитал документацию. Но судя по ней, я понял, что блок, где может появится алерт должен быть заключен в try/catch, но алерт может появится в любом другом месте, соответсвенно там перехвата не будет. Я попытался добавить следующий код
DesiredCapabilities cap=DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);
driver = new ChromeDriver(cap);
Но почему то он по-прежнему никак не реагирует на алерт.
 
Более того, не могу понять почему это тест не помечается как проваленный. В логе выходит стэк ошибки (unexpected alert open), а в конце выходит Total tests run: 0, Failures: 0, Skips: 0. Т.е. как будто он и не проходил.
Тест запускаю с jar файла. При запуске теста из компилятора, он реагирует на ошибку и помечает тест как проваленный из-за timeout

  • 0

#4 Vad1m198

Vad1m198

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Вадим


Отправлено 06 августа 2015 - 11:04

 

 

Почитайте  про капабилити unexpectedAlertBehaviour и какие значения она может принимать (дисмисс, ассепт, игнор).



Capabilities.setCapability("unexpectedAlertBehaviour", "ignore");
Спасибо за идею, я почитал документацию. Но судя по ней, я понял, что блок, где может появится алерт должен быть заключен в try/catch, но алерт может появится в любом другом месте, соответсвенно там перехвата не будет. Я попытался добавить следующий код
DesiredCapabilities cap=DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);
driver = new ChromeDriver(cap);
Но почему то он по-прежнему никак не реагирует на алерт.
 
Более того, не могу понять почему это тест не помечается как проваленный. В логе выходит стэк ошибки (unexpected alert open), а в конце выходит Total tests run: 0, Failures: 0, Skips: 0. Т.е. как будто он и не проходил.
Тест запускаю с jar файла. При запуске теста из компилятора, он реагирует на ошибку и помечает тест как проваленный из-за timeout

 

 

"Тест запускаю с jar файла" - ух ты, а это как?

"Более того, не могу понять почему это тест не помечается как проваленный." - Вот по этому: Total tests run: 0, Failures: 0, Skips: 0


  • 0

#5 Arch

Arch

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Каримов Алексей

Отправлено 06 августа 2015 - 11:20

 

"Тест запускаю с jar файла" - ух ты, а это как?

"Более того, не могу понять почему это тест не помечается как проваленный." - Вот по этому: Total tests run: 0, Failures: 0, Skips: 0

 

В main к классу Testng указал все классы содержащие тесты, и далее run(). Этот запуск по идее ничем не должен отличаться от запуска из maven. А вот то что он не ловит случайный алерт как ошибку, и игнорирует уже запущенный тест - это странно


  • 0

#6 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 06 августа 2015 - 14:48

У вас какой-то отчет генерируется или же вы судите об отсутствии ошибки в тесте по "Total tests run: 0, Failures: 0, Skips: 0" ?


  • 0

#7 Arch

Arch

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Каримов Алексей

Отправлено 07 августа 2015 - 03:44

У вас какой-то отчет генерируется или же вы судите об отсутствии ошибки в тесте по "Total tests run: 0, Failures: 0, Skips: 0" ?

В конце теста расширил класс TestListenerAdapter, в котором в общий список попадают тесты по одному из критериев: успешно, провалено, пропущено (сделано чтобы не листать весь лог). Но первый раз вижу чтобы тест запускался, но из-за неожиданного открывшегося алерта, он никуда не попадал и никак не отмечался.


  • 0

#8 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 11 августа 2015 - 15:45

Попробуйте через Expected conditions:

try {
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = driver.switchTo().alert();
    assertEquals(alert.getText(), text);
    alert.accept();
} catch (AssertionError ae){
    System.out.println("Неправильный текст алерта");
    throw ae;
} catch (TimeoutException e){
    System.out.println("Не дождались алерта");
    throw e;
}

  • 0

#9 Arch

Arch

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Каримов Алексей

Отправлено 24 августа 2015 - 06:33

 

Попробуйте через Expected conditions:

try {
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = driver.switchTo().alert();
    assertEquals(alert.getText(), text);
    alert.accept();
} catch (AssertionError ae){
    System.out.println("Неправильный текст алерта");
    throw ae;
} catch (TimeoutException e){
    System.out.println("Не дождались алерта");
    throw e;
}

Пробему с ожиданием алерта уже решил, Спасибо. Осталась проблема с неожиданно возникшим алертом, который не ожидается в тесте. В итоге тест игнорируется как не запускавшийся после прохождения. При единичном запуске это заметно, но если представить что тестов много и они идут параллельно, получается один тест вылетает из кучи и нигде не фиксируется. Не очень хорошая перспектива. Ошибка есть - записи о ней нет


  • 0



Темы с аналогичным тегами Alert, WebDriver, TestNG

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных