我正在尝试为我的活动编写测试用例。我有几个活动,当我尝试在其他ActivityTest
类上运行测试时出现以下错误时,其中一个没有问题。
android.support.test.espresso.NoActivityResumedException: No 恢复了阶段的活动。您是否忘记启动活动。 (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())));
}
}
我不知道为什么上述类的测试通过而其他类失败。
如果运行设备处于锁定模式和/或活动处于非活动状态,将触发此错误。确保您的设备已打开,并且应用程序/测试能够在前台运行!有史以来最简单的修复(至少对我来说(!
好吧,我刚刚发现了一个痛苦的事实,即 Espresso 无法从快乐路径中的某个地方运行活动。
假设我的快乐之路包含活动 A、B 和 C。我以为我可以在不调用活动 A 的情况下运行活动 B(或 C(的测试。所以这是不可能的,并导致上述错误。您应该做的是单击活动 A 上的按钮,将显示活动 B,以便您能够执行测试,然后单击调用活动 C 并执行测试的按钮(或转到下一个活动的逻辑(。
这是超级痛苦的:(特别是我花了一周时间来实现它的事实。文档不需要清楚地说明?!!!
如果在设备上执行 Espresso 测试时发生此问题,则可以在要测试的活动的 onCreate 中添加以下代码。这将在执行测试时保持屏幕打开
if(BuildConfig.DEBUG){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
并行运行浓缩咖啡测试可能是一个问题。如果测试在运行多个测试时失败,但在单独运行它们时没有失败,则一个可能的原因是测试是并行执行的。
尝试在命令末尾添加--no-parallel
。使用 --无并行。
示例 --> gradlew connectedLiveDebugAndroidTest --no-parallel
在同一设备上运行两个不同的浓缩咖啡测试使它们变得片状且容易失败。
检查 build.gradle 文件中的依赖关系(模块:应用程序(
androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
我有时会在我的 Jenkins 服务器上收到这些错误。两个选项:
-
通常,重新触发构建会让这些测试通过。 尝试运行此测试几次,并检查它们是否通过。
-
使用 UI 自动操作打开屏幕。Espresso 測試失敗,並經常出現 NoActivityResumedException