看起来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>
如果我尝试使用 ViewActions.scrollTo()
滚动到嵌套在 NestedScrollView
中的任何视图,我遇到的第一个问题是出现了 PerformException
。这是因为此操作仅支持 ScrollView
,而 NestedScrollView
并没有继承它。解决此问题的方法在此处here解释,基本上我们可以复制 scrollTo()
中的代码并更改限制以支持 NestedScrollView
。如果 NestedScrollView
不在 CoordinatorLayout
中,则似乎可以正常工作,但是一旦将其放入 CoordinatorLayout
中,滚动操作将失败。
RecyclerView 的问题
对于相同的布局,如果我用 RecyclerView
替换 NestedScrollView
,也会出现滚动问题。
在这种情况下,我使用 RecyclerViewAction.scrollToPosition(position)
。与 NestedScrollView
不同的是,这里我可以看到一些滚动发生。然而,它似乎滚动到了错误的位置。例如,如果我滚动到最后一个位置,它会显示倒数第二个但不是最后一个。当我将 RecyclerView
移出 CoordinatorLayout
时,滚动正常工作。
目前,由于这些问题,我们无法为使用 CoordinatorLayout
的屏幕编写任何 Espresso 测试。是否有人遇到了相同的问题或知道解决方法?