Selenium Webdriver/TestNG/Maven/Xvfb - сделать скриншот при ошибке?

Хотел спросить вас о лучшем способе сделать скриншот на провал в таком проекте? Должен ли я сделать это в коде Selenium или в проекте Maven с помощью какой-либо команды или с помощью Xvfb? Я использую Firefox без головы через Xvfb.

Я видел несколько уроков в интернете, которые делают скриншоты, но я скучаю по общей картине. Как этот класс узнает, когда делать снимок экрана? Как Дженкинс сообщает тестовому коду Java, что он не прошел, и он сделает снимок? Где в тестовом коде я должен ссылаться на класс снимка экрана? Должен ли я использовать попытку поймать весь тест? Существует ли плагин Jenkins, который автоматически сохраняет скриншот при сбое?

2 ответа

Решение

Я только что нашел статью, которая объясняет гораздо лучший способ сделать это: http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html

Как это работает?
По сути, вы передаете пользовательский WebDriverEventListener, в котором есть функции, которые будут вызываться для определенных событий. Одним из таких событий является onException(). Таким образом, каждый раз, когда WebDriver генерирует исключение, вы можете написать код, чтобы сделать снимок экрана.

Я видел три разных способа сделать это:

  1. Если у вас есть статический драйвер, самый простой способ - настроить прослушиватель в TestNG (Overridding TestListenerAdapter), а затем сделать снимок экрана в методе onTestFailure().

  2. Мой личный метод - использовать шаблон Selenium Page Object, но немного измененный. Я создал объект EnhancedWebElement, который оборачивает и расширяет обычный WebElement и имеет ссылку на драйвер. Затем в каждом из методов, которые есть в WebElement, я выполняю вызов в try/catch и в catch, затем делаю снимок экрана. Я открыт для того, чтобы делиться кодом, но мне придется немного урезать, чтобы опубликовать здесь, поэтому, пожалуйста, сообщите мне, если вы хотите его увидеть.

  3. Кроме того, вы можете настроить прокси вокруг WebElement или самого драйвера и заставить его перехватывать все. Я этого не делал, но видел, как это работает в других проектах.

только что нашел статью, которая объясняет гораздо лучший способ сделать это: http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html Blockquote

Но у этого решения есть некоторые проблемы. он сохранит снимок экрана в любом исключении, даже если вы попытаетесь / поймать некоторые в своем коде. Я использую методы из этой статьи. Но в моих файлах testng.xml я добавляю

`

<listeners>
    <listener class-name="MyListener" />
  </listeners>

`

И чем я создаю

`

public class MyListener implements ITestListener{
   //almost all methods i create blank
   //but implement only onTestFailure
   //
   onTestFailure(){
      //here i used methods from article ubove
      //
   }
}

`

И скриншоты делаются только в том случае, если мой @Test провалится.

Другие вопросы по тегам