2013-08-01 69 views
2

想问你关于在这样的项目中失败的截图的最佳方式? 我应该在Selenium代码中,还是在Maven项目中通过某些命令或使用Xvfb? 通过Xvfb使用Firefox无插件。Selenium Webdriver/TestNG/Maven/Xvfb - 截屏失败?

我在互联网上看到了几个需要截图的课程,但是我错过了这里的大图。 这个班怎么知道什么时候截图? Jenkins如何告诉java测试代码它失败了,所以它会拍摄一张照片? 在测试代码中,我应该参考take screenshot类吗? 我应该在整个测试中使用try catch吗? 是不是有一个Jenkins插件会自动保存截图失败?

回答

3

我刚刚发现解释了一个更好的办法做到这一点的文章:http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html

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

我已经看到了三种不同的方法来做到这一点:

  1. 如果你有一个静态的驱动程序,最简单的方法是建立一个监听TestNG中(Overridding TestListenerAdapter),然后取在onTestFailure()方法中截图。

  2. 我个人的方法是使用硒页面对象模式,但修改了一下。我创建了一个EnhancedWebElement对象,该对象封装并扩展了一个普通的WebElement,并且引用了驱动程序。然后在WebElement的每个方法中,我在try/catch和catch中执行调用,然后截取屏幕截图。我愿意分享代码,但是我不得不修剪掉很多,以便在这里发布,所以请告诉我,如果你想看到它。

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

+0

现在,我如何在Jenkins的报告中包含该屏幕截图?我应该把詹金斯的目录放在哪里?你认为这应该是一个新问题的主题吗? –

+0

是的,我会推荐它是一个新问题,因为我从来没有使用詹金斯,所以我是错误的人问。 –

0

刚刚发现解释了一个更好的办法做到这一点的文章:http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html 大段引用

但这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失败。