我写自动测试用于应用程序。在应用程序开始时,它有一个入门(ViewPager),在最后一页上有一些页面和按钮。我需要刷这些页面并按下按钮。这是我上课的课程
public class Onboarding {
ViewInteraction onboardingScreen = onView(
allOf(withId(R.id.vp_onboarder_pager),
childAtPosition(
allOf(withId(R.id.cl_onboarder),
childAtPosition(
withId(android.R.id.content),
0)),
0),
isDisplayed()));
ViewInteraction skipButton = onView(allOf(withId(R.id.btn_finish)));
ViewAction skipOnboardingScreen = new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return any(View.class);
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
ViewPager onboardingPager = (ViewPager) view;
OnboarderAdapter adapter = (OnboarderAdapter) onboardingPager.getAdapter();
int currentPage = 0;
int screenCount = adapter.getCount();
while (screenCount > 0){
onboardingPager.setCurrentItem(currentPage);
screenCount--;
currentPage++;
}
skipButton.perform(click());
}
};
public void skipOnboarding() {
onboardingScreen.perform(skipOnboardingScreen);
}
我用这种方式调用我的测试:
@Test
public void onboardingPass() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Onboarding onboarding = new Onboarding();
onboarding.skipOnboarding();
}
测试执行时,onboardingPager.setCurrentItem(currentPage)
必须切换当前页面,但它不会。当我在debuger中看到它时,测试执行这一行,但页面没有切换。为什么会这样?谢谢。
......我需要刷这些页面......
要在您的仪器测试中滑动,请将其与您的视图一起使用;
onboardingScreen.perform(swipeRight());
swipeRight()来自AndroidX Test包androidx.test.espresso.action.ViewActions.swipeRight
阅读更多关于AndroidX Test Espresso ViewActions包here的信息。
根据您的要求设置滑动,看看是否有帮助。
如果您正在尝试滚动到ViewPager
的最后一页,那么您应该使用ViewPagerActions.scrollToLast代替。而且我确信它们都可以简化为:
public void skipOnboarding() {
onView(withId(R.id.vp_onboarder_pager)).perform(ViewPagerActions.scrollToLast());
onView(withId(R.id.btn_finish)).perform(click());
}