【问题标题】:Espresso : Recyclerview scroll to end浓缩咖啡:Recyclerview 滚动到结束
【发布时间】:2016-09-03 11:20:16
【问题描述】:

有没有办法使用 Espresso 滚动到 recyclerview 的末尾?

有一个带有文本的项目,比如说“Text XYZ”,recyclerview 有一个 id recycler_view。此项恰好是回收站视图的最后一项。

我试过了

onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click());

但这似乎不起作用。有什么想法吗?

【问题讨论】:

  • 似乎不起作用 - 请记录错误
  • 您正在检查视图是否在滚动到它之前显示。
  • @denys ckeck 用于实际的回收者视图。除非实际没有显示回收站视图,否则它应该没有任何区别。
  • 是的,有道理。

标签: android android-recyclerview android-espresso


【解决方案1】:

RecyclerViewActions.scrollTo()ViewHolderItemView 匹配,后者在适配器的 onCreateViewHolder() 中膨胀。为了使scrollTo() 工作,您需要提供一个匹配器来唯一标识ItemView

您当前的匹配器告诉 espresso 滚动到一个用 TextView 膨胀为 itemView 的 ViewHolder。这可能会发生,但通常您会执行一些 ViewGroup 操作以按照您希望的方式设置视图持有者的样式。

如果您将 scrollTo() Matcher 更改为 hasDescendant(withText("Text XYZ")) 以考虑所有嵌套布局(如果有多个)。

还请记住,因为您还尝试单击该项目 - 您不能在同一个 perform() 中执行此操作,因为它会将点击发送到当前的 ViewInteraction,在本例中为 @987654334 @ 带有 id R.id.recycler_view。在同一次执行中这样做只需单击RecyclerView 的中间,而不是您滚动到的项目。

要解决此问题,您需要另一个 onView() 以及用于滚动到某个项目的匹配器,或者使用 RecyclerView.actionOnItem()

如果有另一个onView() 语句,hasDescendant(withText("Text XYZ")) 会让你失败,因为它会找到该 TextView 的所有父级(viewholder、recyclerview、拥有 recyclerview 的视图组等),因为它们都有这个特殊的后裔。这将迫使您使 ItemView 匹配器更加精确并考虑所有嵌套布局。在这些情况下,我通常会使用匹配器 withChild(),但对你来说可能会有所不同。

【讨论】:

  • 太棒了,谢谢,完美运行!应该是这样的 onView(withId(R.id.rvSettings)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(hasDescendant(withText(stringId))));
  • onView(withId(R.id.recycler_view)) .perform(RecyclerViewActions .scrollTo(hasDescendant(withText(getString(stringResId))))); onView(withText(getString(stringResId))).perform(click());
【解决方案2】:

如果你知道RecyclerView的最后位置,那么你可以滚动到它

static final int LAST_POSITION = 100;

// First method
onView(withId(R.id.recyclerview))
    .perform(RecyclerViewActions.scrollToPosition((LAST_POSITION)));

// Second method
onView(withId(R.id.recyclerview))
        .perform(actionOnItemAtPosition(LAST_POSITION, scrollTo()));

【讨论】:

    【解决方案3】:

    即使这种方法不显示向上滚动但允许您选择回收站的位置。 感谢这个人(Espresso-testing-recyclerviews我使用了这种方法:

    onView(allOf(withId(R.id.recyclerUserCustomListsView))) .perform(RecyclerViewActions.actionOnItemAtPosition(7, click()));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多