测试 RecyclerView 是否有 Espresso 数据

Testing RecyclerView if it has data with Espresso

我需要编写一个测试来点击,比方说我的 RecyclerView 中的第一个项目。在某些情况下,RecyclerView 将是空的,因此如果我单击具有 0 索引的位置,它将失败。我该如何编写这样的测试?要先检查recyclerView是否为空再点击具体位置?

问题和评论中的场景略有不同。

让我们来实现下一个测试场景: 如果回收站视图不包含任何内容,则什么也不做。如果回收站视图至少有一个元素,请单击第一个。

@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();
}

对于你的情况,我认为最好用check方法检查一下。下面给出一个例子。

@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
                )

            }
    }