EDIT: Updated description and error message and added some images. Still have this problem.
I have a strange error that occur many times when running espresso tests. After a couple of successful test runs the tests starts failing with following exception:
06-23 13:04:48.438 info TestRunner failed: WhenNavigatingToReportsThenCorrectViewShouldBeShown(com.myapp.ui.views.MainActivityTest)
06-23 13:04:48.439 info TestRunner ----- begin exception -----
06-23 13:04:48.441 info TestRunner android.support.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
06-23 13:04:48.441 info TestRunner at dalvik.system.VMStack.getThreadStackTrace(Native Method)
06-23 13:04:48.441 info TestRunner at java.lang.Thread.getStackTrace(Thread.java:580)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:82)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:53)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87)
06-23 13:04:48.441 info TestRunner at com.myapp.ui.views.MainActivityTest.WhenNavigatingToReportsThenCorrectViewShouldBeShown(MainActivityTest.java:96)
06-23 13:04:48.441 info TestRunner at java.lang.reflect.Method.invoke(Native Method)
06-23 13:04:48.441 info TestRunner at java.lang.reflect.Method.invoke(Method.java:372)
06-23 13:04:48.441 info TestRunner at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
06-23 13:04:48.441 info TestRunner at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
06-23 13:04:48.441 info TestRunner at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
06-23 13:04:48.441 info TestRunner at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
06-23 13:04:48.441 info TestRunner at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
06-23 13:04:48.441 info TestRunner at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
06-23 13:04:48.441 info TestRunner at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:257)
06-23 13:04:48.441 info TestRunner at org.junit.rules.RunRules.evaluate(RunRules.java:18)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
06-23 13:04:48.441 info TestRunner at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
06-23 13:04:48.441 info TestRunner at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
06-23 13:04:48.441 info TestRunner at org.junit.runners.Suite.runChild(Suite.java:128)
06-23 13:04:48.441 info TestRunner at org.junit.runners.Suite.runChild(Suite.java:24)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
06-23 13:04:48.441 info TestRunner at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
06-23 13:04:48.441 info TestRunner at org.junit.runner.JUnitCore.run(JUnitCore.java:136)
06-23 13:04:48.441 info TestRunner at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:54)
06-23 13:04:48.441 info TestRunner at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:228)
06-23 13:04:48.441 info TestRunner at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)
06-23 13:04:48.441 info TestRunner ----- end exception -----
06-23 13:04:48.443 info TestRunner finished: WhenNavigatingToReportsThenCorrectViewShouldBeShown(com.myapp.ui.views.MainActivityTest)
I have a simple app with navigation to pages just containing text at this point, and the test should navigate to each page and identify this text.
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);
private MainActivity mainActivity;
@Before
public void setActivity() {
mainActivity = mActivityRule.getActivity();
}
@Test
public void WhenNavigatingToReportsThenCorrectViewShouldBeShown() {
onView(allOf(withId(R.id.icon), hasSibling(withText(R.string.reports)))).perform(click());
onView(withText("This is the Reports Activity.")).check(matches(isDisplayed()));
Spoon.screenshot(mainActivity, "main_view");
}
}
This failure only occurs on the real device. On emulated device the tests works fine. See images below.
All tests are executed by gradle script, starting with removing the previous app and test api, before installing it again. To ensure clean environment. The log indicates that uninstallation has been successful. Then deploying the new app and start running the tests. Now they fail.
If the tests have failed, it's not until I manually remove the app and the test api from device that I can get successful tests again. But only for a while until the same error occur.
Why do I get NoActivityResumedException, I can't find a good example of what it is and when it occurs.