想问你关于在这样的项目中截屏失败的最佳方法吗? 我应该在Selenium代码中,还是通过某些命令或Xvfb在Maven项目中执行此操作? 我通过Xvfb使用Firefox无头。
我在互联网上看过一些截取屏幕截图的课程,但我在这里错过了大局。 这个班级如何知道何时拍摄截图? Jenkins如何告诉java测试代码它已经失败了,所以它会拍照? 我应该在测试代码中哪里引用截屏类? 我应该在整个测试中使用try catch吗? 是不是有一个Jenkins插件会在失败时自动保存屏幕截图?
答案 0 :(得分:3)
我刚发现一篇文章解释了一种更好的方法:http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html
它是如何工作的?
实际上,您传入一个自定义的WebDriverEventListener,它具有将在某些事件上调用的函数。其中一个事件是onException()。因此,每次WebDriver抛出异常时,您都可以编写代码来截取屏幕截图。
我已经看到了三种不同的方法:
如果你有一个静态驱动程序,最简单的方法是在TestNG中设置一个监听器(覆盖TestListenerAdapter),然后在onTestFailure()方法中截取屏幕截图。
我个人的方法是使用Selenium Page Object模式,但修改了一下。我创建了一个EnhancedWebElement对象,它包装和扩展了一个普通的WebElement,并引用了一个驱动程序。然后在WebElement的每个方法中,我在try / catch和catch中执行调用,然后我截取屏幕截图。我愿意分享这些代码,但是我必须在这里发布一些内容,所以请告诉我你是否想看到它。
或者,您可以围绕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失败时才进行截图。