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

Фотография

Selenium не успевает делать скрин alert окна

alertскриншот

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

#1 Qasl

Qasl

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

  • Members
  • Pip
  • 15 сообщений

Отправлено 06 июня 2014 - 08:37

Доброго времени суток. Гугл слаб да и я тоже.К сожалению,нигде не могу найти даже немного похожей проблемы,поэтому прошу совета у вас.

 

Для начала: пишем тесты на вебдрайвере +ява+тест нг для ие

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

 

Мы привязали скринилку к фейлу теста,т.е. тест фейлится=мы делаем скрин.

Селениум при неуспешном тесте сам закрывает все мелкие окна(умница то какой) почему не понятно.Скрин же делается уже после завершения теста и не зависим от него.Поэтому он просто не успевает заскринить это окно.т.к. тест на тот момент уже завершен и селениум все благополучно закрыл.

 

Можно как то объяснить своевольному селениуму,что нужно оставить окно в покое даже после фейла?

 

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


  • 1

#2 BabyRoot

BabyRoot

    Специалист

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


Отправлено 06 июня 2014 - 08:56

Приведите листинг 

Методов @After*


  • 0

#3 Qasl

Qasl

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

  • Members
  • Pip
  • 15 сообщений

Отправлено 06 июня 2014 - 11:08

Приведите листинг 

Методов @After*

скриншот делается не в метода @After*, а написан следующий листенер:

 

Скрытый текст

 

и подключается к тесту следующим образом:

@Listeners(CaptureScreenshotOnFailureListener.class)


  • 0

#4 BabyRoot

BabyRoot

    Специалист

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


Отправлено 06 июня 2014 - 11:13

А я и не спрашивал про скриншот.

Я спрашивал про то, что у вас происходит после метода, класса, сьюта.

т.к. вы говорите, что селениум, якобы сам, всё закрывает, а вы нет, вот и покажите, что у вас после тестов нет закрытия браузера или покажите что у вас происходит после работы теста.


  • 0

#5 Qasl

Qasl

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

  • Members
  • Pip
  • 15 сообщений

Отправлено 06 июня 2014 - 11:29

А я и не спрашивал про скриншот.

Я спрашивал про то, что у вас происходит после метода, класса, сьюта.

т.к. вы говорите, что селениум, якобы сам, всё закрывает, а вы нет, вот и покажите, что у вас после тестов нет закрытия браузера или покажите что у вас происходит после работы теста.

В таком случае вот:

@AfterTest
    public void stopDriver() {

    }

но нету ничего.совсем


  • 0

#6 BabyRoot

BabyRoot

    Специалист

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


Отправлено 06 июня 2014 - 11:32

Это хорошо, а остальные @After* ?


  • 0

#7 Qasl

Qasl

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

  • Members
  • Pip
  • 15 сообщений

Отправлено 06 июня 2014 - 11:39

Это хорошо, а остальные @After* ?

Остальные не определены


  • 0

#8 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 06 июня 2014 - 11:39

1. Скриншот делается для текущего окна. Если в ходе теста у вас появляется поп-ап и тест фейлится, при этом вы не свичаетесь в новый поп-ап, скрин будет для текущего окна.
2. Если у вас не поп-ап, а простой js alert - то на скрине вы его не увидите, т.к. данные алерты есть модальные окна на уровне операционной системы, а скринится только контент страницы.
  • 0

#9 BabyRoot

BabyRoot

    Специалист

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


Отправлено 06 июня 2014 - 11:59

Тогда вам надо более конкретизировать логику выполнения тестов.

Т.е. конкретнее указать где закрывать браузер и при каких обстоятельствах.

Например:

 

@AfterMethod

//Сюда попадаем сразу после завершения теста

Если всё нормально - ничего не делать (т.е. используем браузер для следующего метода/теста).

Если ошибка - закрытие браузера (скриншот будет сделан листенером).

 

@AfterClass

//сюда попадаем после завершения всех тестов в классе или после завершения теста с ошибкой

Если всё нормально - закрытие браузера (у меня так, т.к. у меня параллельность разбита по классово)

если нет - просто пропускаем, т.к. браузер уже закрыт

 

@AfterSuite

//сюда попадаем после выполнения всех классов, окончательно пробуем всё завершить, если оно работает.

Закрытие браузера.

Остановка драйвер-сервиса.

Остановка прокси.

 

Но тут ещё надо описывать, конечно, методы @Before*. от этого зависит как и что вы хотите запускать и когда.

И вот если вы бы в @AfterMethod не указали закрытие браузера при ошибке - то у вас бы браузер и не закрылся.

А так получается, тестнг говорит селениуму отработать по схеме афтерсьют и закрыть все браузеры.


  • 0

#10 Qasl

Qasl

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

  • Members
  • Pip
  • 15 сообщений

Отправлено 06 июня 2014 - 13:04

1. Скриншот делается для текущего окна. Если в ходе теста у вас появляется поп-ап и тест фейлится, при этом вы не свичаетесь в новый поп-ап, скрин будет для текущего окна.
2. Если у вас не поп-ап, а простой js alert - то на скрине вы его не увидите, т.к. данные алерты есть модальные окна на уровне операционной системы, а скринится только контент страницы.

у нас второй вариант -_- Решили обойти с помощью явовской скринилки-она скринит полностью раб.стол,захватывая все окна.

Но опять встает вопрос на каком моменте он должен скринить.Если после фейла теста,то селениум просто так же будет закрывать это окно до момента скриншота.

 

 

some text

 

 

и тут на помощь пришли вы \о/

Сделали так:

Осталась вся так же скринилка в отдельном классе,привязанная к фейлу теста и теперь окно закрывается не сразу,т.к. добавили:

@AfterMethod
    public void takeScreenshot() throws IOException{
        BufferedImage image;
        try {
            image = new Robot().createScreenCapture(new Rectangle(
                    Toolkit.getDefaultToolkit().getScreenSize()));
            ImageIO.write(image, "png", new File("c://z.png"));
        } catch (HeadlessException e) {
            e.printStackTrace();
        } catch (AWTException e) {
            e.printStackTrace(); }
        }

Всем спасибо


  • 0

#11 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 09 июня 2014 - 07:39

 

1. Скриншот делается для текущего окна. Если в ходе теста у вас появляется поп-ап и тест фейлится, при этом вы не свичаетесь в новый поп-ап, скрин будет для текущего окна.
2. Если у вас не поп-ап, а простой js alert - то на скрине вы его не увидите, т.к. данные алерты есть модальные окна на уровне операционной системы, а скринится только контент страницы.

у нас второй вариант -_- Решили обойти с помощью явовской скринилки-она скринит полностью раб.стол,захватывая все окна.

Но опять встает вопрос на каком моменте он должен скринить.Если после фейла теста,то селениум просто так же будет закрывать это окно до момента скриншота.

 

 

some text

 

 

и тут на помощь пришли вы \о/

Сделали так:

Осталась вся так же скринилка в отдельном классе,привязанная к фейлу теста и теперь окно закрывается не сразу,т.к. добавили:

@AfterMethod
    public void takeScreenshot() throws IOException{
        BufferedImage image;
        try {
            image = new Robot().createScreenCapture(new Rectangle(
                    Toolkit.getDefaultToolkit().getScreenSize()));
            ImageIO.write(image, "png", new File("c://z.png"));
        } catch (HeadlessException e) {
            e.printStackTrace();
        } catch (AWTException e) {
            e.printStackTrace(); }
        }

Всем спасибо

 

 

Alert закрывается автоматически из-за (https://code.google....redCapabilities): 

unexpectedAlertBehaviour string What the browser should do with an unhandled alert before throwing out the UnhandledAlertException. Possible values are "accept", "dismiss" and "ignore"

 

Проблема в том, что средствами WebDriver нельзя снять скриншот, если есть alert. Нужно обязательно сначала закрыть alert и только потом снимать скриншот. Ваш метод не будет работать при запуске через Grid на удаленной машине, т.к. вы получите скриншот текущей машины, а не удаленной. Лучше проверять на наличие alert и если alert есть выводить в лог его текст, закрывать его и потом делать скриншот средствами WD


  • 0


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

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