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

Arch

Регистрация: 13 фев 2015
Offline Активность: 14 сен 2015 12:41
-----

Мои сообщения

В теме: Неожиданный alert ломает тесты и не попадает в общие результаты

14 сентября 2015 - 09:46

Вы же делали уже такую тему?

Возможно дело в том, как именно вы запускаете свои тесты. (см. сообщение от Vad1m198)

Я при возникновении "неожидаемых" алертов - выясняю, где и в каких случаях они могут появиться, и делаю их "ожидаемыми".

 

Есть еще такой момент.

Когда запускается сразу набор тестов идущих друг за другом - неожидаемый алерт в одном из тестов (который вы никак не обработали) - можно помешать дальнейшему выполнению других тестов. Эти "другие" тесты = и будут отмечены как "не запускавшиеся".

Попробуйте где-нибудь в базовом классе, от которого у вас наследуются тестовые классы, добавить доп.проверку:

    @AfterMethod
    public void testEnd(ITestResult result) {
        checkAlert();
    }
	    
    public void checkAlert() {
        try {
            app.getDriver().switchTo().alert().accept();
            log.warn("Alert has been found and accepted.");
        } catch (NoAlertPresentException e) {}
    }

После каждого тест-метода будет вызываться проверка на наличие алерта. Если он вдруг найден - он будет подтверждаться. Если считаете, что что такой алерт у вас = ошибка, можно вместо подтверждения добавить "throw new Exception(<текст ваш>)".

Это не избавит от необходимости выяснить, почему алерт появился там, где вы его не ждете (может это баг того ПО, которое вы тестируете? или просто тест не доделан), но хотя бы не будет мешать дальнейшему выполнению остальных тестов.

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


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

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;
}

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


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

07 августа 2015 - 03:44

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

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


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

06 августа 2015 - 11:20

 

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

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

 

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


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

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