我正在尝试为我的活动编写测试用例。我有几个活动,当我尝试在其他ActivityTest
类上运行测试时遇到以下错误时,其中一个活动没有问题。
android.support.test.espresso.NoActivityResumedException:没有 阶段活动已恢复。你忘了发动这项活动吗? (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())));
}
}
我不知道为什么上面的类的测试会在其他类失败时传递。
答案 0 :(得分:6)
好的,我刚发现一个令人痛苦的事实,即Espresso无法从快乐路径的某个地方运行活动。
让我们说我的快乐路径包含活动A,B和C.我以为我能够在不调用活动A的情况下运行活动B(或C)的测试。所以这是不可能的,并导致上述错误。您应该做的是单击活动A上的按钮,活动B显示,这样您就可以执行测试,然后单击调用活动C并执行测试的按钮(或转到下一个活动的逻辑)
这太痛苦了:( 特别是我花了一个星期才实现它的事实。文档不能清楚地说出来吗?!!!
答案 1 :(得分:3)
如果运行设备处于锁定模式,和/或活动处于非活动状态,则会触发此错误。确保您的设备已开启且app / test能够在前台运行! 有史以来最简单的修复(至少对我而言)!
答案 2 :(得分:0)
我有时会在Jenkins服务器上收到这些错误。两个选项:
通常重新触发构建会传递这些内容。尝试运行此测试几次,并检查它们是否通过。
使用UI automator打开屏幕。 Espresso test fails with NoActivityResumedException often
答案 3 :(得分:0)
如果在设备上进行Espresso测试时发生此问题,则可以在要测试的活动的onCreate中添加以下代码。这将在执行测试时保持屏幕开启
if(BuildConfig.DEBUG){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
答案 4 :(得分:0)
并行运行Espresso测试可能是一个问题。如果在多次运行时测试失败,但在单独运行时没有失败,则可能的原因是并行执行测试。
尝试在命令末尾添加--no-parallel
。
使用--no-parallel。
示例-> gradlew connectedLiveDebugAndroidTest --no-parallel
在同一设备上同时运行的两个不同的Espresso测试使它们不稳定并且容易失败。