如何测试 Espresso 活动之间的滑动?
How to test swiping between Activities in Espresso?
我正在 Espresso 中创建一个测试,它调用 swipeRight()
转到设置行为的 MainActivity
,然后返回 ConsumerSettingsActivity
测试 Views
。然而,问题是在调用滑动之后,我得到一个 NoActivityResumedException
指向带有 R.id.mode_text
的第二条测试线。
@RunWith(AndroidJUnit4.class)
public class ConsumerSettingsActivityTest {
private ConsumerSettingsActivity mConsumerSettingsActivity;
@Rule
public ActivityTestRule<ConsumerSettingsActivity> mActivityTestRule =
new ActivityTestRule<>(ConsumerSettingsActivity.class);
@Before
public void initialize() {
mConsumerSettingsActivity = mActivityTestRule.getActivity();
}
@Test
public void checkCorrectButtonsAreClickableInPhotoModeThenReturnToMainActivity() {
// swipe to MainActivity and set behavior
onView(allOf(withId(R.id.settings_top_bar), isDisplayed())).perform(swipeRight());
onView(withId(R.id.mode_text)).perform(click());
onView(withId(R.id.photo_mode)).perform(click());
// test ratio Views
onView(withId(R.id.ratio_full)).check(matches(isClickable()));
onView(withId(R.id.ratio_full)).perform(click());
onView(withId(R.id.ratio_square)).check(matches(isClickable()));
onView(withId(R.id.ratio_square)).perform(click());
...
}
}
简短回答:MainActivity
被调用但未创建。
长答案:当ConsumerSettingsActivity
调用滑动更改为MainActivity
时,实际滑动调用finish()
。由于未创建 MainActivity
,因此抛出 NoActivityResumedException
。为了解决这个问题,测试改为从 MainActivity
开始,然后滑动到 ConsumerSettingsActivity
。另外,我不需要让线程休眠就可以在活动之间滑动。
我正在 Espresso 中创建一个测试,它调用 swipeRight()
转到设置行为的 MainActivity
,然后返回 ConsumerSettingsActivity
测试 Views
。然而,问题是在调用滑动之后,我得到一个 NoActivityResumedException
指向带有 R.id.mode_text
的第二条测试线。
@RunWith(AndroidJUnit4.class)
public class ConsumerSettingsActivityTest {
private ConsumerSettingsActivity mConsumerSettingsActivity;
@Rule
public ActivityTestRule<ConsumerSettingsActivity> mActivityTestRule =
new ActivityTestRule<>(ConsumerSettingsActivity.class);
@Before
public void initialize() {
mConsumerSettingsActivity = mActivityTestRule.getActivity();
}
@Test
public void checkCorrectButtonsAreClickableInPhotoModeThenReturnToMainActivity() {
// swipe to MainActivity and set behavior
onView(allOf(withId(R.id.settings_top_bar), isDisplayed())).perform(swipeRight());
onView(withId(R.id.mode_text)).perform(click());
onView(withId(R.id.photo_mode)).perform(click());
// test ratio Views
onView(withId(R.id.ratio_full)).check(matches(isClickable()));
onView(withId(R.id.ratio_full)).perform(click());
onView(withId(R.id.ratio_square)).check(matches(isClickable()));
onView(withId(R.id.ratio_square)).perform(click());
...
}
}
简短回答:MainActivity
被调用但未创建。
长答案:当ConsumerSettingsActivity
调用滑动更改为MainActivity
时,实际滑动调用finish()
。由于未创建 MainActivity
,因此抛出 NoActivityResumedException
。为了解决这个问题,测试改为从 MainActivity
开始,然后滑动到 ConsumerSettingsActivity
。另外,我不需要让线程休眠就可以在活动之间滑动。