在运行Espresso测试时,我在Jenkins和某些队友计算机上收到以下错误。我已经搜索了这个错误,并且看到很多与超时或某些动画有关。所有设备都关闭了动画。
例如:上周我遇到了这个问题,我卸载了所有Android Studio,删除了代码,然后重新安装了所有代码。那没起效。我还升级了Java和JDK。在那之后我仍然遇到这个问题。然后有一天它刚刚起作用。我不明白为什么。
现在我的同事正在解决这个问题。当针对一个设备(5.1)而不是另一个设备(6.0)运行时,会遇到此问题。一个不同的同事遇到了相反的问题。
所以我的问题是 - 我能检查什么?采取什么步骤?我们比较了设备上的注释 - 所有IDE都与版本号和构建工具相匹配等等。我的想法已经不多了。
谢谢!
java.lang.RuntimeException: Could not launch intent Intent { act=android.intent.action.MAIN flg=0x14000000 cmp=com.COMPANY.espresso/com.COMPANY.activity.LauncherActivity } within 45 seconds. Perhaps the main thread has not gone idle within a reasonable amount of time? There could be an animation or something constantly repainting the screen. Or the activity is doing network calls on creation? See the threaddump logs. For your reference the last time the event queue was idle before your activity launch request was 1469050322683 and now the last time the queue went idle was: 1469050322683. If these numbers are the same your activity might be hogging the event queue.
at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:360)
at android.support.test.rule.ActivityTestRule.launchActivity(ActivityTestRule.java:219)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:268)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1862)
答案 0 :(得分:1)
我的第一个猜测是,ProgressBar
阻止了Espresso,而Activity
的内容视图包含一个不确定的ProgressBar
,它始终可见或在{{1}之前变为可见}返回。动画使应用程序忙碌,Espresso等待它超时。这会产生您发布的错误。
因为您的测试有时会起作用,我认为onResume
的可见性取决于后台任务。如果在Espresso超时之前隐藏(或从视图层次结构中删除)进度条,则运行测试。
第二个猜测是,您正在使用ProgressBar
作为后台作业。如果您在AsyncTasks
返回之前开始长时间运行AsyncTasks
,这也会产生您发布的错误。
检查onResume
是否是您可以完全删除它的原因,或者用静态替换不确定的drawable(即ProgressBar
)。
答案 1 :(得分:1)
请清理项目并制作项目。
同时关闭虚拟或物理设备上的系统动画。