Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing RecyclerView if it has data with Espresso

I need to write a test to click, let's say on the first item in my RecyclerView. At some cases the RecyclerView will be empty and therefore if I click on the position with 0 index it will fail. How do I write a test like this? To check first if the recyclerView not empty and then click on the specific position?

like image 515
MikeB Avatar asked Oct 19 '16 20:10

MikeB


2 Answers

There are a little bit different scenarios in question and in the comment.

Let's implement the next test scenario: If recycler view does not contain anything, do nothing. If recycler view has at least one element, click on the first.

@Rule
public final ActivityTestRule<YourActivity> mActivityRule = new ActivityTestRule<>(YourActivity.class);

@Test
public void testSample(){
    if (getRVcount() > 0){
        onView(withId(R.id.our_recycler_view)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
    }
}

private int getRVcount(){
    RecyclerView recyclerView = (RecyclerView) mActivityRule.getActivity().findViewById(R.id.our_recycler_view);
    return recyclerView.getAdapter().getItemCount();
}
like image 128
Dmitriy Avatar answered Sep 18 '22 13:09

Dmitriy


For your case, I think it's better to check with check method. An example is given below.

@Test
 fun mainActivityTest() {   
    val yourRecycler = onView(
        allOf(

            childAtPosition(
                withClassName(`is`("androidx.constraintlayout.widget.ConstraintLayout")),
                0
            ),
            instanceOf(RecyclerView::class.java)
        )
    )
    yourRecycler.check { view, noViewFoundException ->
                noViewFoundException?.apply {
                    throw this
                }
                assertTrue(view is RecyclerView &&
                    view.adapter != null && view.adapter?.itemCount?:-1 > 0
                )

            }
    }
like image 24
Debanjan Avatar answered Sep 20 '22 13:09

Debanjan