等待使用浓缩咖啡查看寻呼机动画?

Mar*_*ark 13 android-testing android-espresso

尝试使用ViewPager进行一些测试.

我想在标签之间滑动,我不想继续直到滑动完成.但似乎没有办法关闭视图寻呼机的动画(禁用开发人员选项下的所有动画).

因此,这总是会导致测试失败,因为视图寻呼机尚未完成动画,因此视图尚未完全显示:

// swipe left
onView(withId(R.id.viewpager)).check(matches(isDisplayed())).perform(swipeLeft());

// check to ensure that the next tab is completely visible.
onView(withId(R.id.next_tab)).check(matches(isCompletelyDisplayed()));
Run Code Online (Sandbox Code Playgroud)

是否有一种优雅的,甚至是推荐的方式来做到这一点,还是我不能在那里进行某种定时等待?

vau*_*oid 26

实施的IdlingResource@Simas实际上非常简单:

public class ViewPagerIdlingResource implements IdlingResource {

    private final String mName;

    private boolean mIdle = true; // Default to idle since we can't query the scroll state.

    private ResourceCallback mResourceCallback;

    public ViewPagerIdlingResource(ViewPager viewPager, String name) {
        viewPager.addOnPageChangeListener(new ViewPagerListener());
        mName = name;
    }

    @Override
    public String getName() {
        return mName;
    }

    @Override
    public boolean isIdleNow() {
        return mIdle;
    }

    @Override
    public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
        mResourceCallback = resourceCallback;
    }

    private class ViewPagerListener extends ViewPager.SimpleOnPageChangeListener {

        @Override
        public void onPageScrollStateChanged(int state) {
            mIdle = (state == ViewPager.SCROLL_STATE_IDLE
                    // Treat dragging as idle, or Espresso will block itself when swiping.
                    || state == ViewPager.SCROLL_STATE_DRAGGING);
            if (mIdle && mResourceCallback != null) {
                mResourceCallback.onTransitionToIdle();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我是否正确地认为每次测试我只需要注册一次ViewPagerIdlingResource.所以我在测试开始时注册VPIR,然后在onView().执行(swipeLeft),然后再次onView().执行(swipeLeft),然后检查我的视图.我不必在两次刷卡之间取消注册并注册我的VPIR吗? (2认同)