由于Android Camera Intent重新绘制屏幕,​​Espresso测试失败

时间:2016-09-02 08:31:40

标签: android android-studio android-espresso

我正在进行一项有摄像头的活动,并且通过onDraw()方法在相机上设置了一个面罩,我正在为相机屏幕上方的导航抽屉编写测试用例,但是收到错误

  

也许主线程在合理的时间内没有闲置?可能会有一个动画或不断重新绘制屏幕的东西。或者活动是在创建网络呼叫?请参阅threaddump日志。在您的活动启动请求为1472804618974之前,事件队列最后一次空闲以供您参考,现在队列最后一次空闲时间为:1472804618974。如果这些数字相同,您的活动可能会占用事件队列

我已经关闭了已经提到过的动画 QFormLayout

不知道需要做什么。

2 个答案:

答案 0 :(得分:1)

  

我已经关闭了已经提到过的动画   https://google.github.io/android-testing-support-library/docs/espresso/setup/index.html

出现此问题不是因为动画已关闭,而是因为Espresso框架字符:Espresso取决于您的实际应用程序上下文。

  

Espresso for Android是完美而快速的测试自动化框架,   但它有一个重要的限制 - 你只能操作   在测试环境下的应用内部。

     

这意味着无法自动化此类应用的测试   功能如:

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

因为你必须处理来自移动设备的其他应用程序 -   通知栏,通讯录或人物应用等

     

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

这意味着Espresso测试基于UI线程并在主线程空闲时等待()。

  

也许主线程在合理的时间内没有闲置?可能会有一个动画或不断重新绘制屏幕的东西。或者活动是在创建网络呼叫?请参阅threaddump日志。在您的活动启动请求为1472804618974之前,事件队列最后一次空闲以供您参考,现在队列最后一次空闲时间为:1472804618974。如果这些数字相同,您的活动可能会占用事件队列。

这意味着您的主线程实际上正忙,Espresso无法执行任何新操作,它正在等待免费闲置资源运行。

要解决此问题,您可以选择以下选项:

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

希望有所帮助

答案 1 :(得分:0)

所以我能够解决我的问题。 问题是由invalidate()的连续调用方法onDraw()引起的。 相反,我将其替换为postInvalidateDelayed(),并且对于某些条件(如动画)仅使用invalidate()。 它帮了! :) 避免连续重新粉刷屏幕。