Похоже, что 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
, используя ViewActions.scrollTo()
, первая проблема, которую я нахожу, это то, что я получаю PerformException
. Это связано с тем, что это действие поддерживает только ScrollView
и NestedScrollView
не расширяет его. Обходной путь для этой проблемы объясняется здесь, в основном мы можем скопировать код в scrollTo()
и изменить ограничения для поддержки NestedScrollView
. Кажется, что это работает, если NestedScrollView
не находится в CoordinatorLayout
, но как только вы помещаете его в CoordinatorLayout
, действие прокрутки завершается с ошибкой.
Проблема с RecyclerView
Для того же макета, если я заменю NestedScrollView
на RecyclerView
, также есть проблемы с прокруткой.
В этом случае я использую RecyclerViewAction.scrollToPosition(position)
. В отличие от NestedScrollView
, здесь я вижу прокрутку. Однако похоже, что он прокручивается в неправильное положение. Например, если я прокручиваю до последней позиции, она делает видимым вторую, но не последнюю. Когда я перемещаю RecyclerView
из CoordinatorLayout
, прокрутка работает так, как должна.
В настоящий момент мы не можем написать тест Espresso для экранов, которые используют CoordinatorLayout
из-за этих проблем. Кто-нибудь испытывает те же проблемы или знает обходное решение?