Espresso,android.support.test.espresso.NoActivityResumedException:阶段RESUMED中没有活动.

Hes*_*sam 3 android android-espresso android-instrumentation

嗨,我正在尝试为我的活动编写测试用例.我有几个活动,当我尝试在其他ActivityTest类上运行测试时遇到错误,其中一个没有问题.

android.support.test.espresso.NoActivityResumedException:阶段RESUMED中没有活动.你忘了发动这项活动吗?(test.getActivity()或类似的)?

这是我的课,我的所有测试用例都失败了:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class LocatingActivityTest
{
    @Rule
    public ActivityTestRule<LocatingActivity> mActivityTestRule = new ActivityTestRule<>(LocatingActivity.class);

    private LocatingActivity mLocatingActivity;

    @Before
    public void setup()
    {
        mLocatingActivity = mActivityTestRule.getActivity();
    }

    @Test
    public void viewsMustBeVisible()
    {
        onView(withId(R.id.locating_text)).check(matches(isCompletelyDisplayed()));
        onView(withId(R.id.sonarView)).check(matches(isCompletelyDisplayed()));
        onView(withId(R.id.locating_cancel_booking)).check(matches(isCompletelyDisplayed()));

        onView(withId(R.id.locating_list_view)).check(matches(isDisplayed()));
    }

    @Test
    public void viewsMustBeEnabled()
    {
        onView(withId(R.id.tvNoDriverFound)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.tvNextSearch)).check(matches(not(isCompletelyDisplayed())));
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这是我的另一个类,它的所有测试用例都通过了:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class BookingActivityTest
{
    @Rule
    public IntentsTestRule<BookingTaxiActivity> mActivityTestRule = new IntentsTestRule<>(BookingTaxiActivity.class);

    private BookingTaxiActivity mBookingTaxiActivity;

    @Before
    public void setup()
    {
        mBookingTaxiActivity = mActivityTestRule.getActivity();
    }

    @Test
    public void viewsMustBeVisible()
    {
        onView(withId(R.id.booking_pick_up_layout)).check(matches(isCompletelyDisplayed()));
        onView(withId(R.id.booking_drop_off_layout)).check(matches(isCompletelyDisplayed()));
        onView(withId(R.id.fab_booking)).check(matches(isCompletelyDisplayed()));
        onView(withId(R.id.booking_estimated_fare)).check(matches(isCompletelyDisplayed()));
        onView(withId(R.id.ibMenu)).check(matches(isCompletelyDisplayed()));
        onView(withId(R.id.booking_toolbar)).check(matches(isCompletelyDisplayed()));

        onView(withId(R.id.booking_taxi_type_picker)).check(matches(isDisplayed()));
    }

    @Test
    public void viewsMustBeEnabled()
    {
        // These Views are off the screen
        onView(withId(R.id.tag_widget)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.payment_btn)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.current_pickup_view)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.advance_pickup_view)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.booking_notes_btn)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.promo_code_btn)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.taxi_warning)).check(matches(not(isCompletelyDisplayed())));
        onView(withId(R.id.booking_book_now)).check(matches(not(isCompletelyDisplayed())));
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么上面的类测试会在其他类失败时通过.任何想法将不胜感激.谢谢.

小智 8

如果运行设备处于锁定模式和/或活动处于非活动状态,将触发此错误。确保您的设备已打开并且应用程序/测试能够在前台运行!有史以来最简单的修复程序(至少对我而言)!

  • 你的屏幕必须打开 (2认同)

Hes*_*sam 6

好吧,我刚发现一个令人痛苦的事实,即Espresso无法从快乐路径的某个地方运行一个Activity.

让我说我的快乐路径包含活动A,B和C.我以为我能够在不调用活动A的情况下运行活动B(或C)的测试.所以这是不可能的,并导致上述错误.您应该做的是单击活动A上的按钮,活动B显示,这样您就可以执行测试,然后单击调用活动C并执行测试的按钮(或转到下一个活动的逻辑) .

这是非常痛苦的:(特别是我花了一个星期来实现它的事实.文档不能清楚地说出来吗?!!!