У меня есть CardView с RecyclerView ребенок. Каждый элемент в RecyclerView - это слово с его переводом. Я хочу проверить удаление определенного элемента в RecyclerView. Для меня важно быть независимым от позиции предмета, потому что я тестирую в разных условиях (с нулевым или большим количеством предметов с возможностью различной сортировки ... позиция для меня не имеет смысла). Поэтому я написал Matcher для просмотра на основе данных в ViewHolder.Как проверить, существует ли элемент RecyclerView, не зная его положения, но данные, используя Espresso
public static Matcher<RecyclerView.ViewHolder> withWordAndTranslation(String word, String translation) {
checkNotNull(word);
checkNotNull(translation);
return new BoundedMatcher<RecyclerView.ViewHolder, WordsViewHolder>(WordsViewHolder.class) {
@Override
protected boolean matchesSafely(WordsViewHolder holder) {
return holder.wordTxt.getText().toString().equalsIgnoreCase(word)
&& holder.translationTxt.getText().toString().equalsIgnoreCase(translation);
}
@Override
public void describeTo(Description description) {
description.appendText("view holder with word, translation: " + word + ", " + translation);
}
};
}
Пока что так хорошо. Предполагая, что элемент с «test_word» и «test_translation» в его TextViews добавляется к RecyclerView, я получаю соответствующее представление и использовать кнопку действия на нем:
onView(allOf(withId(R.id.wordsRecyclerView), withParent(withId(R.id.cardView)), isDisplayed()))
.perform(actionOnHolderItem(withWordAndTranslation("test_word", "test_translation"), click()));
FYI дает этот выбор пункта. Я нажимаю кнопку, которая задание является для удаления выбранного элемента удаления:.
onView(allOf(withId(R.id.action_delete), isDisplayed())).perform(click());
и я действительно хочу, чтобы проверить, если элемент ("test_word, test_translation) до сих пор существует на RecyclerView Но я не знаю, как Любые идеи/решения
.?
Да, но RecyclerView не является AdapterView. это ViewGroup. – Przemo
вы правы, в моем ответе я смешал вещи Вам нужно получить адаптер RecyclerView, а не AdapterView (whi ch не относится к RecyclerViews). Адаптер (или дочерняя реализация класса RecyclerView # Adapter) является единственным экземпляром, который знает обо всех элементах вашего RecyclerView. Поэтому вам нужно получить список данных из вашего адаптера, а затем проверить, что ваш элемент больше не указан в этом списке. – sebokopter