Dentro de una actividad, tengo una visión reciclador personalizado que contiene 2 textviews y 2 botones como se muestra a continuación.
El id para el botón de icono de la papelera de reciclaje es botón Delete. Me gustaría acceder a este botón antes de probar expreso para que pueda burlarse de un clic.
Dos métodos que he intentado y han fallado se muestran a continuación:
onView(withId(R.id.basket))
.perform(actionOnItemAtPosition(4, click() ));
onView(withText("Cherry"))
.perform(
RecyclerViewActions.actionOnItem(
hasDescendant(withId(R.id.deleteButton)),
ViewActions.click()
)
);
Gracias por cualquier ayuda de antemano usted.
Una forma de hacer clic en un punto de vista dentro de una RecyclerView
vista de elemento es mediante la creación de una acción vista personalizada:
public static ViewAction actionOnItemView(Matcher<View> matcher, ViewAction action) {
return new ViewAction() {
@Override public String getDescription() {
return String.format("performing ViewAction: %s on item matching: %s", action.getDescription(), StringDescription.asString(matcher));
}
@Override public Matcher<View> getConstraints() {
return allOf(withParent(isAssignableFrom(RecyclerView.class)), isDisplayed());
}
@Override public void perform(UiController uiController, View view) {
List<View> results = new ArrayList<>();
for (View v : TreeIterables.breadthFirstViewTraversal(view)) {
if (matcher.matches(v)) results.add(v);
}
if (results.isEmpty()) {
throw new RuntimeException(String.format("No view found %s", StringDescription.asString(matcher)));
} else if (results.size() > 1) {
throw new RuntimeException(String.format("Ambiguous views found %s", StringDescription.asString(matcher)));
}
action.perform(uiController, results.get(0));
}
};
}
A continuación, utilice uno de los RecyclerViewActions en su RecyclerView
, entonces actionOnItemView
como acción posterior a la vista del elemento si tiene éxito:
ViewAction itemViewAction = actionOnItemView(withId(R.id.deleteButton), click());
onView(withId(your_recycler_view)).perform(actionOnItemAtPosition(4, itemViewAction));