【问题标题】:Android/Espresso Intent error on running tests运行测试时出现 Android/Espresso Intent 错误
【发布时间】:2016-07-21 21:20:48
【问题描述】:

在运行 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)

【问题讨论】:

  • 您的应用程序启动时会做什么?它是否在后台执行代码?你的Application.onCreate() 以及当LauncherActivity 中的onCreateonStartonResume 执行时会发生什么?您是否显示不确定的ProgressBar?贴出LauncherActivity的代码及其布局和ApplicationonCreate
  • 我无法显示任何代码,但我们的应用程序会执行一些后台网络请求、身份验证,并且我们设置了一些单例。我们还显示了一个加载指示器。
  • 确保您的设备没有任何安全措施来解锁屏幕。确保在测试开始运行之前解锁屏幕。

标签: android jenkins android-espresso


【解决方案1】:

我的第一个猜测是,ProgressBar 会阻止 Espresso,并且您的 Activity 的内容视图包含不确定的 ProgressBar,它始终可见或在 onResume 返回之前变得可见。动画使应用程序保持忙碌,而 Espresso 会一直等到超时。这将完全创建您发布的错误。

由于您的测试有时会起作用,我假设ProgressBar 的可见性取决于后台任务。如果在 Espresso 超时之前进度条被隐藏(或从视图层次结构中移除),则测试运行。

第二个猜测是,您正在使用AsyncTasks 进行后台作业。如果您在onResume 返回之前开始长时间运行AsyncTasks,这也会产生您发布的错误。

要检查 ProgressBar 是否是您可以完全删除它的原因,或者将其不确定的可绘制对象替换为静态可绘制对象(即 ColorDrawable)。

【讨论】:

    【解决方案2】:

    请清理项目并创建一个项目。

    同时关闭虚拟或物理设备上的系统动画。

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2015-07-17
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多