当前位置: 首页 > 知识库问答 >
问题:

使用Espresso在RecyclerView项中单击view

华泳
2023-03-14

如何使用Espresso单击RecyclerView项目中的特定视图?我知道我可以使用以下方法单击位置0处的项目:

OnView(withId(r.id.RecolyerView))。执行(RecolyerViewActions.ActionOnItematPosition(0,click()));

但我需要点击项目内部的特定视图,而不是项目本身。

提前道谢。

--编辑--

更准确地说:我有一个RecolyerView(r.id.Recolyer_View),其中的项目是CardView(r.id.Card_View)。在每个CardView中,我有四个按钮(以及其他东西),我想单击一个特定的按钮(r.id.bt_deliver)。

我想使用Espresso2.0的新功能,但我不确定这是可能的。

如果不可能的话,我想用下面这样的东西(使用Thomas Keller代码):

onRecyclerItemView(R.id.card_view, ???, withId(R.id.bt_deliver)).perform(click());

但我不知道该在问号上打些什么。

共有2个答案

谭翔
2023-03-14

现在有了android.support.test.espresso.contrib,它变得更容易了:

1)添加测试依赖项

androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude group: 'com.android.support', module: 'appcompat'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'recyclerview-v7'
}

*排除3个模块,因为很可能您已经有了它

2)然后做一些类似的事情

onView(withId(R.id.recycler_grid))
            .perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));

onView(withId(R.id.recyclerView))
  .perform(RecyclerViewActions.actionOnItem(
            hasDescendant(withText("whatever")), click()));

onView(withId(R.id.recycler_linear))
            .check(matches(hasDescendant(withText("whatever"))));
颜永怡
2023-03-14

您可以使用自定义视图操作来完成此操作。

public class MyViewAction {

    public static ViewAction clickChildViewWithId(final int id) {
        return new ViewAction() {
            @Override
            public Matcher<View> getConstraints() {
                return null;
            }

            @Override
            public String getDescription() {
                return "Click on a child view with specified id.";
            }

            @Override
            public void perform(UiController uiController, View view) {
                View v = view.findViewById(id);
                v.performClick();
            }
        };
    }

}

然后您可以用

onView(withId(R.id.rv_conference_list)).perform(
            RecyclerViewActions.actionOnItemAtPosition(0, MyViewAction.clickChildViewWithId(R.id. bt_deliver)));
 类似资料:
  • 问题内容: 我正在使用espresso-contrib在上执行操作,它可以正常运行,例如: 我需要对此进行断言。像这样: 但是,由于RecyclerViewActions当然期望执行某个操作,因此它说出了错误的第二个参数类型。浓咖啡没有。 有什么方法可以在回收者视图上执行断言吗? 问题答案: 您应该查看Danny Roa的解决方案Custom RecyclerView Actions并按以下方式

  • 问题内容: 我正在使用Android Espresso测试我的活动。我有多个操作栏项,其中大多数隐藏在溢出中。我正在尝试运行此测试,但是错误表明层次结构中没有视图(与不可见视图不同): 错误: 那么,我应该如何访问ID为的按钮项? 我注意到了。我可以单击它,但是然后我得到另一个看起来不像动作项目列表的视图层次结构。我是否应该在视图层次结构中进行挖掘,直到找到我的操作项,或者是否有更好的指定方法来单

  • 这是我第一次尝试实现。我在和类之间实现了一个接口来处理UI元素(按钮)上的点击事件。我在获取对发生单击的的引用时遇到问题。我可以单击列表中第一个项目的,但是我定义的操作是在我的回收器视图中的最后一个上执行的。我终于想出了通过我的界面传递这个位置,但是我很难理解如何从它那里获得对那个查看者的引用。

  • 我正在OnItemClickListener接口的OnItemClicked(int position,view v)方法中传递position和view。现在,在我的ViewReceptionistActivity中,我要检查单击了哪个项和哪个子部分。如果用户单击图像,则执行任务A,如果用户单击名称,则执行任务B,依此类推。 下面是我的布局文件-viewreceptionist_item.xml

  • 在我的应用程序中,当我点击RecyclerView中的一个项目(问题)时,该项目使用Firebase RecyclerPagingAdapter从Firebase实时数据库中分页数据,它会显示在另一个片段中点击的项目的详细信息(使用导航组件)。第一次点击时效果很好,但是当我返回到前一个片段并在RecyclerView上第二次点击相同的项目时,项目的详细信息不会显示。 因为我使用安全args来将项目

  • 如何使用网格布局管理器水平显示三行三列的循环视图项目,增加垂直增加的价值,类似于下图