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