【问题标题】:Espresso 2 on Android, intermediately tests fail after failing to start the activity under test while activities from previous tests are still aliveAndroid 上的 Espresso 2,在未能启动被测活动后中间测试失败,而先前测试中的活动仍然存在
【发布时间】:2016-01-05 16:29:48
【问题描述】:

我正在使用 Espresso 2 测试我的 Android 应用。中间我看到测试随机失败并显示此 Espresso 失败消息:

失败:testLongPressXXXXX (com.company.xxx.tests.testSuite.Test) ----- 开始异常 ----- android.support.test.espresso.NoMatchingViewException:层次结构中找不到匹配的视图: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 秒钟,然后才会失败。当然,这只有在我一次运行多个测试时才会发生。

我的问题是为什么在测试之间会有实时活动,有没有办法让仪器等到前一个测试的活动完成后再进行下一个测试。

如果有人对测试中间失败的原因有不同的想法,那也会有所帮助。

【问题讨论】:

  • 首先,在您的设备/模拟器中打开“开发者选项”并将所有动画设置为从1x3xnone。然后运行测试 - 你会看到不同 ;-)
  • 感谢 piotrek 我这样做了,它仍然会在中间发生。我还可以看到,之前测试的 live Activity 数量仍然不是 0。

标签: android android-espresso


【解决方案1】:

这个问题是不久前提出的,但由于这似乎仍然相关,我想我会分享我的发现。我面临着类似的问题 - 具有唯一 ID 的视图上出现 AmbiguousViewMatcherException,不同的测试随机失败 - 可能是由于活动没有被销毁。

这似乎是一个已知问题,应该在下一个版本中解决(参见此处:https://github.com/google/android-testing-support-library/issues/16)。显然 onDestroy() 和 isFinishing() 在每次测试后都不会被可靠地调用,所以你可能不会每次都得到一个新的 Activity,甚至最终会得到两个重叠的 Activity。

在他们修复它之前,我决定不把时间浪费在解决方法上,而是开始使用 Genymotion 模拟器来解决我的问题 - 可能是因为它们比 Android Studio 中的内置模拟器运行得更快(正如建议的 here )。

【讨论】:

  • 我还发现,有趣的是,如果模拟器有焦点,而不是在后台,我的测试更有可能成功。
猜你喜欢
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
相关资源
最近更新 更多