Selenium Webdriver / TestNG / Maven / Xvfb - 截屏失败?

时间:2013-08-01 08:52:58

标签: maven webdriver screenshot testng xvfb

想问你关于在这样的项目中截屏失败的最佳方法吗? 我应该在Selenium代码中,还是通过某些命令或Xvfb在Maven项目中执行此操作? 我通过Xvfb使用Firefox无头。

我在互联网上看过一些截取屏幕截图的课程,但我在这里错过了大局。 这个班级如何知道何时拍摄截图? Jenkins如何告诉java测试代码它已经失败了,所以它会拍照? 我应该在测试代码中哪里引用截屏类? 我应该在整个测试中使用try catch吗? 是不是有一个Jenkins插件会在失败时自动保存屏幕截图?

2 个答案:

答案 0 :(得分:3)

我刚发现一篇文章解释了一种更好的方法:http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html

它是如何工作的?
实际上,您传入一个自定义的WebDriverEventListener,它具有将在某些事件上调用的函数。其中一个事件是onException()。因此,每次WebDriver抛出异常时,您都可以编写代码来截取屏幕截图。

我已经看到了三种不同的方法:

  1. 如果你有一个静态驱动程序,最简单的方法是在TestNG中设置一个监听器(覆盖TestListenerAdapter),然后在onTestFailure()方法中截取屏幕截图。

  2. 我个人的方法是使用Selenium Page Object模式,但修改了一下。我创建了一个EnhancedWebElement对象,它包装和扩展了一个普通的WebElement,并引用了一个驱动程序。然后在WebElement的每个方法中,我在try / catch和catch中执行调用,然后我截取屏幕截图。我愿意分享这些代码,但是我必须在这里发布一些内容,所以请告诉我你是否想看到它。

  3. 或者,您可以围绕WebElement或驱动程序本身设置代理,并让它捕获所有内容。我没有这样做,但我看到它适用于其他项目。

答案 1 :(得分:0)

  

刚刚找到一篇解释更好的方法的文章:http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html   块引用

但这个决定有一些问题。它会在任何异常时保存屏幕截图,即使你在代码中尝试/捕获一些异常也是如此。 我使用那篇文章中的方法。但是在我的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失败时才进行截图。