【问题标题】:How to use espresso to scroll to child of RecyclerView-Item如何使用 espresso 滚动到 RecyclerView-Item 的子项
【发布时间】:2019-02-15 09:09:46
【问题描述】:

我正在为我的应用程序编写浓缩咖啡测试。对于一项测试,我必须单击 RecyclerView-Item 上的按钮。所说的项目比屏幕大,所以当我滚动到项目时,所需的按钮仍然没有显示(这是必需的,所以我可以点击它)。

我试图滚动到视图

onView(withId(R.id.recycler_view)).perform(scrollTo<MyViewHolder>(hasDescendant(withId(R.id.target_button))))

但这只是滚动到包含按钮的项目的顶部。由于该按钮位于该项目的最底部并且该项目大于屏幕,因此当我尝试单击该按钮时,我得到了

Action will not be performed because the target view does not match one or more of the following constraints:
at least 90 percent of the view's area is displayed to the user.

我也试过

onView(withId(R.id.recycler_view)).perform(actionOnItemAtPosition<MyViewHolder>(0, EspressoUtils.clickChildViewWithId(R.id.target_button)))

其中EspressoUtils.clickChildViewWithId(id: Int)this 问题的已接受答案中描述的内容。这也产生了同样的错误。如何滚动到 RecyclerView-Item 中的特定子项?

【问题讨论】:

  • 您知道要滚动到的回收站视图中项目的文本吗?
  • RecyclerView里面的Item包含多个view,包括我要点击的那个。在这种情况下,我只知道我要点击的视图的文本。
  • 你能检查这个链接stackoverflow.com/questions/42915073/…它告诉如何滚动到一个位置然后你可以看到这个链接stackoverflow.com/questions/31394569/…
  • 这两个问题都涉及项目,如果它们被滚动到,则适合屏幕。如果我滚动到我的项目,它的下部仍然不显示,因为项目比屏幕大。我的问题是如何让项目的下半部分显示出来。
  • 在你的问题中,你说,“......当我尝试点击我得到的按钮时”但你没有提供你如何尝试的代码。顺便说一句,最好将EspressoUtils.clickChildViewWithId 的代码添加到您的问题中,即使您提供了链接。

标签: android android-recyclerview android-espresso


【解决方案1】:

以下解决方案适用于我在 RecyclerView 项目中单击一个两倍于我的屏幕的视图时。注意:我点击的视图实际上不在屏幕上,但由于它在视图层次结构中,所以可以点击。

创建自定义 ViewAction:

private fun clickChildViewWithId(id: Int) = object : ViewAction {

    override fun getConstraints() = null

    override fun getDescription() = "click child view with id $id"

    override fun perform(uiController: UiController, view: View) {
        val v = view.findViewById<View>(id)
        v.performClick()
    }
}

用法:

onView(withId(R.id.recycler_view))
            .perform(actionOnItemAtPosition<MyViewHolder>(0, clickChildViewWithId(R.id.target_button)))

【讨论】:

  • 这最初对我不起作用。单击不会因错误而失败,但由于未打开预期的活动,因此未执行单击操作。但我发现我必须单击该视图的父视图,因为视图本身不可点击,只是它的父视图。如果您要求 Espresso 单击不可点击的项目而不是什么都不做,Espresso 应该向您报告。无论如何,感谢您的帮助。
  • 很高兴我能帮上忙。至于 Espresso,我不确定它是否应该告诉您视图不可点击,因为这可能正是您正在测试的内容。但我明白你的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
相关资源
最近更新 更多