安卓相机意图重绘屏幕导致Espresso测试失败

3
我有一个涉及相机的活动,相机上面有一个遮罩,是通过onDraw()方法完成的。我正在为导航抽屉编写测试用例,该抽屉位于相机屏幕之上,但是出现错误,提示:

也许主线程在合理的时间内未空闲?可能有某个动画或者不断刷新屏幕的东西。或者该活动在创建时进行了网络调用?请查看线程转储日志。为您提供参考,您的活动启动请求之前事件队列最后一次空闲的时间是1472804618974,现在队列最后一次空闲的时间是:1472804618974。如果这些数字相同,则您的活动可能会占用事件队列

我已经像https://google.github.io/android-testing-support-library/docs/espresso/setup/index.html中所述关闭了动画,但不知道需要做什么。
2个回答

1

如前所述,我已关闭动画效果,具体请参考https://google.github.io/android-testing-support-library/docs/espresso/setup/index.html

这个问题不是由于关闭了动画效果引起的,而是因为Espresso框架的特性:它依赖于你当前的应用程序上下文。

安卓Espresso是一个完美快速的测试自动化框架,但它有一个重要限制 - 您只允许在被测试应用程序的上下文中操作。

这意味着无法自动化测试以下应用程序特性:

  • 应用推送通知
  • 联系人同步
  • 从另一个应用导航到您要测试的应用程序,

因为您需要处理移动设备上的其他应用程序 - 通知栏、联系人或人员应用程序等。

来自:http://qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html

这意味着Espresso测试基于UI线程,并等待主线程处于空闲状态(idle())。

也许主线程在合理的时间内没有空闲?可能有一个动画或者其他东西不断地重绘屏幕。或者活动在创建时进行网络调用?请查看线程转储日志。供您参考,您的活动启动请求之前事件队列上次空闲的时间是1472804618974,现在事件队列最后一次空闲的时间是:1472804618974。如果这些数字相同,您的活动可能正在占用事件队列。
这意味着您的主线程实际上很忙,Espresso无法执行任何新操作,它正在等待可用的空闲资源运行。
要解决此问题,您有以下选项:

我已经在使用 EspressoRobotiumUiAutomator,所以不要害怕同时使用它们。

希望这可以帮到你。


1
所以我成功解决了我的问题。 问题是由于在onDraw()中不断调用方法invalidate()引起的。 取而代之,我使用了postInvalidateDelayed(),并且仅在某些条件(如动画)下才使用invalidate()。 这很有帮助! :) 避免连续重绘屏幕。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接