2013-08-01 3 views
2

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

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

ответ

3

Я просто нашел статью, которая объясняет гораздо лучший способ сделать это: 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 или самого драйвера и поймать его. Я этого не делал, но я видел, как он работает над другими проектами.

+0

Теперь, как включить этот скриншот в отчеты Дженкинса? в каком каталоге дженкинсов я должен положить его? Как вы думаете, это должно быть предметом нового вопроса? –

+0

Да, я бы рекомендовал, чтобы это был новый вопрос, потому что я никогда не использовал Дженкинса, поэтому я не тот человек, которого нужно спросить. –

0

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

Но это dicision есть некоторые проблемы. он будет сохранять скриншот на любом исключении, даже если вы попытаетесь/поймаете их в своем коде. Я использую методы из этой статьи. Но в моем тестировании.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 терпит неудачу.

Смежные вопросы