Высота RecyclerView установлена на wrap_content, и если элемент не виден хотя бы на 90%, тест не выполняется.
Что вы можете сделать, так это проверить одного из дочерних элементов RecyclerView.
Сначала я объявляю следующий метод:
fun nthChildOf(parentMatcher: Matcher<View?>, childPosition: Int): Matcher<View?>? {
return object : TypeSafeMatcher<View>() {
override fun describeTo(description: Description) {
description.appendText("with $childPosition child view of type parentMatcher")
}
override fun matchesSafely(view: View): Boolean {
if (view.parent !is ViewGroup) {
return parentMatcher.matches(view.parent)
}
val group = view.parent as ViewGroup
return parentMatcher.matches(view.parent) && group.getChildAt(childPosition) == view
}
}
}
с его помощью вы можете проверить, отображается ли его первый дочерний элемент:
onView(nthChildOf(withId(R.id.comments_view), 0)).check(matches(isDisplayed()))
И проверить один элемент его дочерних элементов (recyclerview_element_id для Пример):
onView(allOf(
withId(R.id.recyclerview_element_id),
isDescendantOfA(
nthChildOf(withId(R.id.comments_view), 0))
)).check(matches(isDisplayed()))
Еще одна вещь, которую вы можете попробовать, если ваш RecyclerView расширяется до доступного пространства экрана, - это изменить макет RecyclerView, чтобы все ограничения были установлены, а высота - 0dp:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/comments_view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
У меня так и делаю:
onView(withId(R.id.myRecyclerviewId)).check(matches(isDisplayed()))
у меня работает.