如何使用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());
但我不知道该在问号上打些什么。
现在有了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"))));
您可以使用自定义视图操作来完成此操作。
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来将项目
如何使用网格布局管理器水平显示三行三列的循环视图项目,增加垂直增加的价值,类似于下图