我正在使用Espresso 2来测试我的Android应用。中间我看到测试随机失败,发现此Espresso失败消息:
失败:testLongPressXXXXX(com.company.xxx.tests.testSuite.Test) -----开始异常----- android.support.test.espresso.NoMatchingViewException:找不到层次结构中的视图匹配:with id:com.company.xxx:id / xxx_view_id 查看层次结构: +> DecorView {id = -1,visibility = VISIBLE,width = 729,height = 319,has-focus = false,has-focusable = false,has-window-focus = true,is-clickable = false,is- enabled = true,is-focused = false,is-focusable = false,is-layout-requested = false,is-selected = false,root-is-layout-requested = false,has-input-connection = false,x = 0.0,y = 0.0,child-count = 1} ...
每次测试开始时,Espresso仪器都会打印出之前测试中仍然活着的活动数量:
MonitoringInstrumentation:仍在CREATED为STOPPED的活动:(数字)
每当我看到测试失败时,我总会看到活动活动的数量不是0,这使我相信这就是这个问题的原因,即使大多数时候在测试测试之前有实时活动仍然成功通过。
当发生这种情况时,设备只会在失败前显示主屏幕大约10秒钟。这当然只有在我一次运行多个测试时才会发生。
我的问题是为什么测试之间会有实时活动,有没有办法让Instrumentation等到上一次测试的活动完成后才能进行下一次测试。
如果某人对于为什么测试中间失败有不同的想法,那也会有所帮助。
答案 0 :(得分:5)
这个问题刚才被问到,但由于这似乎仍然有用,我以为我会分享我发现的东西。我面临着一个类似的问题 - 对具有唯一ID的视图的AmbiguousViewMatcherException,不同的测试随机失败 - 可能是由于活动未被销毁。
这似乎是一个已知问题,应在下一版本中解决(请参阅此处:https://github.com/google/android-testing-support-library/issues/16)。显然onDestroy()和isFinishing()在每次测试后都不会被可靠地调用,所以你可能不会每次都获得一个新的Activity,甚至最终还是有两个活动。
在他们修复之前我决定不浪费时间在一个解决方法上,但开始使用Genymotion模拟器来解决我的问题 - 可能是因为它们比Android Studio中的内置驱动程序运行得更快(如建议的那样{ {3}})。