我的重写方法不能正常工作,代码进入方法,但不执行

问题描述 投票:1回答:2

我写自动测试用于应用程序。在应用程序开始时,它有一个入门(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中看到它时,测试执行这一行,但页面没有切换。为什么会这样?谢谢。

java android android-espresso android-testing
2个回答
0
投票

......我需要刷这些页面......

要在您的仪器测试中滑动,请将其与您的视图一起使用;

onboardingScreen.perform(swipeRight());

swipeRight()来自AndroidX Test包androidx.test.espresso.action.ViewActions.swipeRight

阅读更多关于AndroidX Test Espresso ViewActions包here的信息。

根据您的要求设置滑动,看看是否有帮助。


0
投票

如果您正在尝试滚动到ViewPager的最后一页,那么您应该使用ViewPagerActions.scrollToLast代替。而且我确信它们都可以简化为:

public void skipOnboarding() {
    onView(withId(R.id.vp_onboarder_pager)).perform(ViewPagerActions.scrollToLast());
    onView(withId(R.id.btn_finish)).perform(click());
}
© www.soinside.com 2019 - 2024. All rights reserved.