2017-02-18 19 views
1

У меня есть 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 Но я не знаю, как Любые идеи/решения

.?

ответ

0

документация Эспрессо рекомендует get the Adapter and iterate over it. Возьмите пример кода и заменить AdapterView с RecyclerView.

+0

Да, но RecyclerView не является AdapterView. это ViewGroup. – Przemo

+1

вы правы, в моем ответе я смешал вещи Вам нужно получить адаптер RecyclerView, а не AdapterView (whi ch не относится к RecyclerViews). Адаптер (или дочерняя реализация класса RecyclerView # Adapter) является единственным экземпляром, который знает обо всех элементах вашего RecyclerView. Поэтому вам нужно получить список данных из вашего адаптера, а затем проверить, что ваш элемент больше не указан в этом списке. – sebokopter