在ID为

时间:2018-12-20 15:48:52

标签: android android-recyclerview android-animation android-espresso

有没有可能:

-是否要禁用所有动画以供回收者查看或在UI线程上运行它们以进行意式浓缩咖啡测试?

-将空闲资源添加到android.support.v7.recyclerview.extensions.ListAdapter吗?

问题如下:espresso测试抛出异常

  

android.support.test.espresso.PerformException:在视图“ ID为XXX:id / items_rcv”的视图上执行“ android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction@3d4956f”时出错。

尝试执行以下代码时:

//... code that executes recyclerView.adapter.submitList(items)
onView(withId(R.id.items_rcv))
            .perform(RecyclerViewActions.actionOnItemAtPosition<ViewHolder>(
                0, click()
            ));

问题是执行单击操作时,项目不可见。由于RecyclerView的适配器是从 android.support.v7.recyclerview.extensions.ListAdapter

扩展而来的,因此延迟显示了它们。
class ItemsAdapter : ListAdapter<Item, RecyclerView.ViewHolder>() {
...
}

因此它使用了AsyncListDiffer,它在回收器视图中显示了一些动画。

提前谢谢

更新:

以下内容没有帮助: 1)将BackgroundThreadExecutor设置为AsyncListDiffer的MainThreadExecutor

ItemsAdapter(AsyncDifferConfig.Builder<Item>(ItemsDiffCallback)
                    .setBackgroundThreadExecutor(MainThreadExecutor())
                    .build())

2)为RecyclerView禁用itemAnimator

mActivityTestRule.activity.findViewById<RecyclerView>(R.id.items_rcv).itemAnimator = null

1 个答案:

答案 0 :(得分:0)

您可以创建CountingIdlingResource并递增,然后填充列表,并在列表完成后递减。

只记得在您的@Before和@After上注册IdlingResource,就像这样

IdlingRegistry.getInstance().register(rule.getIdlingResource()); //before
IdlingRegistry.getInstance().unregister(rule.getIdlingResource()); //after