捕获JUnit测试的中心位置?

时间:2012-01-09 10:36:14

标签: selenium junit

我想在Selenium测试期间抓住任何扔掉的东西,例如为了制作截图。我现在能想出的唯一解决方案是在每个测试方法中使用try和catch块分别围绕测试步骤,如下所示:

    @Test
    public void testYouTubeVideo() throws Throwable {
        try {

            // My test steps go here


        } catch (Throwable t) {
            captureScreenshots();
            throw t;
        }
    }

我确信有更好的解决方案。我想为这个try-catch-makeScreenshot例程提供更高,更集中的位置,以便我的测试能够再次包含测试步骤。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:4)

您需要声明TestRule,可能是TestWatcher,或者如果您想更明确地定义规则,ExternalResource。这看起来像是:

public class WatchmanTest {
    @Rule
    public TestRule watchman= new TestWatcher() {
        @Override
        protected void failed(Description d) {
            // take screenshot here
        }
    };

    @Test
    public void fails() {
        fail();
    }

    @Test
    public void succeeds() {
    }
}

TestWatcher匿名类当然可以被考虑在内,并且只是从测试类中引用。

答案 1 :(得分:1)

我使用Spring's AOP解决了类似的问题。总结:

  1. 将selenium对象声明为bean
  2. 使用添加方面 @AfterThrowing
  3. 方面可以截取屏幕截图并保存到 具有半随机生成名称的文件。
  4. 该方面也重新抛出异常,异常消息包含文件名,以便您可以在以后查看它。
  5. 我发现由于抓取屏幕截图的瑕疵,保存页面的HTML会更有帮助。