Существует RecyclerView (R.id.recycler_view). Каждый элемент (R.id.movie_card) содержит два представления: ImageView и TextView (R.id.movie_title_text_view). Цель состоит в том, чтобы проверить с Espresso, что все элементы переработчика содержат не пустой текстовый вид. Пожалуйста, помогите правильно написать код.
Есть также использование Idle. Итак, момент начала тестирования RecyclerView правильный (после загрузки всех данных).
Не ясно, как сделать утверждение, что все R.id.movie_title_text_view не пусты.
Полный метод испытаний следующий:
@Rule
public ActivityTestRule activityTestRule = new ActivityTestRule(MainActivity.class);
@Test
public void GridFragmentRecycleViewTest(){
final int TESTED_VIEWHOLDERS_QUANTITY = 10;
IdlingResource componentIdlingResource = getIdlingResource();
Espresso.registerIdlingResources(componentIdlingResource);
Log.d(TAG, "GridFragmentRecycleViewTest()");
onView(withId(R.id.action_search)).perform(click());
onView(isAssignableFrom(SearchView.class)).perform(typeSearchViewText("lord")).perform(pressKey(KeyEvent.KEYCODE_ENTER));
EspressoIdlingResource.increment();
onView(withId(R.id.recycler_view)).check(new RecyclerViewItemCountAssertion(TESTED_VIEWHOLDERS_QUANTITY));
//up to here all works good
onView(allOf(withId(R.id.movie_title_text_view))).check(matches(withText(not(isEmptyString()))));
}
public static ViewAction typeSearchViewText(final String text){
return new ViewAction(){
@Override
public Matcher<View> getConstraints() {
//Ensure that only apply if it is a SearchView and if it is visible.
return allOf(isDisplayed(), isAssignableFrom(SearchView.class));
}
@Override
public String getDescription() {
return "Change view text";
}
@Override
public void perform(UiController uiController, View view) {
((SearchView) view).setQuery(text,false);
}
};
}
Линия:
OnView (allOf (withId (R.id.movie_title_text_view))) проверить (матчи (withText (не (isEmptyString ()))));.
делает следующее исключение:
androidx.test.espresso.AmbiguousViewMatcherException: '(с id: com.example.myapplication3: id / movie_title_text_view)' соответствует нескольким представлениям в иерархии.
Виды проблем помечены как «**** MATCHES ****» ниже.
Просмотр иерархии:
+> DecorView {id = -1, видимость = VISIBLE, ширина = 1440, высота = 2560, has-focus = true, has-focusable = true, has-window-focus = true, is-clickable = false, is-enabled = true, сфокусировано = false, is-focusable = false, is-layout-запрашивается = false, is-selected = false, layout-params = {(0,0) (fillxfill) ty = BASE_APPLICATION wanim = 0x10302f8
fl = LAYOUT_IN_SCREEN LAYOUT_INSET_DECOR SPLIT_TOUCH HARDWARE_ACCELERATED DRAWS_SYSTEM_BAR_BACKGROUNDS
pfl = FORCE_DRAW_STATUS_BAR_BACKGROUND}, tag = null, root-is-layout-запрашивается = false, has-input-connection = false, x = 0.0, y = 0.0, child-count = 3}
...