4

我正在尝试为我的活动编写测试用例。我有几项活动,其中一项活动没有问题,而当我尝试对其他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())));
    }
}

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

@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())));
    }
}

我不知道为什么上述类的测试通过而其他类失败。

4

5 回答 5

24

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

于 2017-07-03T20:25:58.040 回答
5

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

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

这是超级痛苦的:(特别是我花了一个星期才实现它。文档不是很清楚地告诉它吗?!!!

于 2016-02-16T00:32:27.947 回答
2

并行运行 Espresso 测试可能是一个问题。如果测试在运行多个时失败,但在单独运行时没有失败,那么一个可能的原因是测试是并行执行的。

尝试--no-parallel在命令末尾添加。使用 --no-parallel。

示例 -->gradlew connectedLiveDebugAndroidTest --no-parallel

在同一台设备上同时运行两个不同的 Espresso 测试会使它们变得不稳定并且容易失败。

于 2019-07-21T01:37:16.617 回答
0

如果在设备上进行 Espresso 测试时发生此问题,那么您可以在您正在测试的活动的 onCreate 中添加以下代码。这将在执行测试时保持屏幕打开

    if(BuildConfig.DEBUG){
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
于 2018-06-06T15:13:03.967 回答
-1

我有时会在我的 Jenkins 服务器上收到这些错误。两种选择:

  1. 通常重新触发构建将使这些通过。尝试运行此测试几次,并检查它们是否通过。

  2. 使用 UI automator 打开屏幕。Espresso 测试经常因 NoActivityResumedException 而失败

于 2016-12-21T12:17:33.790 回答