41

CoordinatorLayoutなどの Espresso アクションの動作が壊れているようです。scrollTo()RecyclerViewActions.scrollToPosition()

NestedScrollView に関する問題

このようなレイアウトの場合:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        ...

    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        ...

    </android.support.design.widget.AppBarLayout>

</android.support.design.widget.CoordinatorLayout>

最初の問題をNestedScrollView使用して内部の任意のビューにスクロールしようとすると、 . これは、このアクションがサポートするだけで拡張しないためです。この問題の回避策については、こちらで説明しています。基本的には、コードをコピーして、制約をサポートするように変更できます。が a にない場合は機能するようですが、 a の中に入れるとすぐにスクロールアクションが失敗します。ViewActions.scrollTo()PerformExceptionScrollViewNestedScrollViewscrollTo()NestedScrollViewNestedScrollViewCoordinatorLayoutCoordinatorLayout

RecyclerView の問題

NestedScrollView同じレイアウトの場合、を aに置き換えるRecyclerViewと、スクロールにも問題があります。

この場合、私は使用してRecyclerViewAction.scrollToPosition(position)います。とは異なりNestedScrollView、ここではスクロールが行われていることがわかります。ただし、間違った位置にスクロールしているようです。たとえば、最後の位置までスクロールすると、最後から 2 番目は表示されますが、最後の位置は表示されません。スクロールのRecyclerView外に移動すると、正常に動作します。CoordinatorLayout

現時点では、CoordinatorLayoutこの問題により、使用する画面用の Espresso テストを作成できません。同じ問題が発生したか、回避策を知っている人はいますか?

4

8 に答える 8

15

CoordinatorLayout->ViewPager->NestedScrollView でこの問題が発生しました。同じ scrollTo() 動作を取得するための簡単な回避策は、画面を上にスワイプすることでした:

onView(withId(android.R.id.content)).perform(ViewActions.swipeUp());
于 2016-12-14T21:26:33.787 に答える
2

NestedScrollViewScrollToAction クラスを作成しました。

代わりに、アクティビティ固有のものを作成するのに適した場所だと思います。

言及する価値がある唯一のことは、コードが親のnestedScrollViewを検索し、そのCoordinatorLayoutの動作を削除することです。

https://gist.github.com/miszmaniac/12f720b7e898ece55d2464fe645e1f36

于 2016-09-12T12:52:49.980 に答える