我想让UiAutomator在测试失败时截取屏幕截图。我目前有这种设置的方式是这样的:
@Override
protected void setUp() throws Exception {
System.out.println("Beginning setup...");
testFailed = true;
}
@Override
protected void tearDown() throws Exception {
if(testFailed)
getUiDevice().takeScreenshot("/sdcard/Pictures/Screenshots/failure.jpg");
}
然后个人测试就像这样
public void testExample(){
/* do stuff */
testFailed = false;
}
这个想法是,如果抛出异常,testFailed永远不会设置为false,并且tearDown在测试后调用时会截取屏幕截图。
我真的希望能够在我的代码中添加一个testListener或未捕获的异常处理程序,以便更优雅地解决这个问题。但是,UiAutomator有自己的未捕获异常处理程序,它覆盖了我试图实现的异常处理程序。我可以添加我未捕获的异常处理程序,但它只是被忽略了。
有没有办法可以添加一个未捕获的异常处理程序,它会拦截它们被抛出的位置和UiAutomator的未捕获异常处理程序之间的异常,然后将它们传递给UiAutomator?
我是否有另一种方法可以监听测试失败/抛出异常而无需在每次测试结束时特别添加布尔值?
答案 0 :(得分:2)
而不是在拆解时调用getUiDevice()。takeScreenshot()将其置于函数内 - 比如foo()并在异常发生时调用它。
现在将要测试的代码放在try catch块中并在catch调用foo()中。有点像这样 -
try{
//add your test code here
}
catch(Exception e){
foo();
//and if you want to throw exception again so your current test flow is not disturbed then add
throw e;
}