我想在Selenium测试期间抓住任何扔掉的东西,例如为了制作截图。我现在能想出的唯一解决方案是在每个测试方法中使用try和catch块分别围绕测试步骤,如下所示:
@Test
public void testYouTubeVideo() throws Throwable {
try {
// My test steps go here
} catch (Throwable t) {
captureScreenshots();
throw t;
}
}
我确信有更好的解决方案。我想为这个try-catch-makeScreenshot例程提供更高,更集中的位置,以便我的测试能够再次包含测试步骤。任何想法都将不胜感激。
答案 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解决了类似的问题。总结:
@AfterThrowing
我发现由于抓取屏幕截图的瑕疵,保存页面的HTML会更有帮助。