2

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

我在互联网上看到了一些截屏的课程,但我在这里错过了大局。这个类怎么知道什么时候截屏?jenkins怎么告诉java测试代码失败了,所以会拍照?我应该在测试代码的哪个位置引用截屏类?我应该在整个测试中使用 try catch 吗?没有 Jenkins 插件会在失败时自动保存屏幕截图吗?

4

2 回答 2

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 或驱动程序本身设置代理并让它捕获所有内容。我还没有这样做,但我已经看到它在其他项目中起作用。

于 2013-08-05T16:31:15.877 回答
0

刚刚发现一篇文章解释了一种更好的方法: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 失败时才进行屏幕截图。

于 2014-08-12T19:03:39.133 回答