Espresso Recylerview в ViewPager соответствует нескольким представлениям

Как настроить таргетинг на Viewpager с помощью фрагмента, который реализует RecylerView с идентификатором, соответствующим нескольким представлениям?

У меня есть MainActivity, у которого есть Viewpager. Viewpager имеет 5 вкладок. На этих 5 вкладках я использую RecylerViews для загрузки изображений в каждом из них.

XML RecylerView повторно используется в разных фрагментах, поэтому при доступе к нему с помощью Espresso он продолжает жаловаться на идентификатор, соответствующий нескольким представлениям.

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/> 

Мой RecylerView не загружает какой-либо текст, загружает только изображения, поэтому я даже не могу сделать withText("Text here") . Я не могу использовать onData() для RecylerViews.

 @RunWith(AndroidJUnit4.class) @LargeTest public class ExampleTest { @Rule public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>( MainActivity.class); Activity activity = mActivityRule.getActivity(); @Test public void ExampleMethod() { // perform a swipe onView(withId(R.id.viewpager)).perform(swipeLeft()); // try to click on one of the recycler view items. // this crashes: onView(withId(R.id.recycler_view)) .perform(RecyclerViewActions.actionOnItemAtPosition(2, click())); } } 

Поэтому он падает и указывает на ошибку

Android.support.test.espresso.AmbiguousViewMatcherException: 'с id: com.example.app:id/recycler_view' соответствует нескольким представлениям в иерархии. Представления задач отмечены «**** MATCHES ****» ниже.

// Список различных иерархий

 View Hierarchy: View Hierarchy: +>DecorView{id=-1, visibility=VISIBLE, width=720, height=1280, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1} //... 

Я столкнулся с той же проблемой при использовании ViewPager , и добавление предложения isDisplayed() в ViewMatcher разрешило его для меня (хотя, как и все в Espresso, время от времени оно может быть неровным) …

 onView(allof(isDisplayed(), withId(R.id.recycler_view))) .perform(RecyclerViewActions.actionOnItemAtPosition(2, click())); 

То, что я сделал, заключалось в том, чтобы установить различное описание содержимого для каждого фрагмента, а Espresso поддерживает hasContentDescription() и withContentDescription()

Intereting Posts
Медленный эспрессо Android Studio Unit Testing: не удается найти инструментарий ИЛИ класс не найден ex Как поставить список в намерении Мне нужен альтернативный вариант для HttpClient в Android для отправки данных на PHP, поскольку он больше не поддерживается Макет андроида программно Параллельные HTTP-запросы с доработкой Отключить кнопку возврата на временное время Закрытие диалогового окна предупреждения в андроиде при нажатии кнопки в первый раз Как уменьшить размер пользовательского кода для приложения Xamarin Forms в Visual Studio 2015? Конвертировать игру Spritekit на Android? Как открыть URL-адрес кнопки в браузере по умолчанию или в веб-браузере Не выбран целевой рендеринг с помощью Android Studio Как установить SignalR в Android Studio, чтобы игнорировать проблемы SSL для конвертации MoveCamera с ошибками CameraUpdateFactory.newLatLngBounds Растровое повторение + закругленные углы