是否存在任何可能性:
-禁用回收器视图的所有动画,或在UI线程上运行它们以使用espresso进行测试
或
-将idlingresources添加到android.support.v7.recyclerview.extensions.ListAdapter
问题如下:Espresso测试引发异常
android.support.test.espresso.PerformException:执行android.ssupport.test.espresso.contrib.RecyclerViewActions时出错$ActionOnItemAtPositionViewAction@3d4956f"正在查看",id为:XXX:id/items_rcv'。
尝试执行以下代码时:
//... 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,它在recyclerator视图中显示了一些动画项目。
提前感谢
更新:
以下内容对没有帮助:1) 将BackgroundThreadExecutior设置为AsyncListDiffer 的MainThreadExecutior
ItemsAdapter(AsyncDifferConfig.Builder<Item>(ItemsDiffCallback)
.setBackgroundThreadExecutor(MainThreadExecutor())
.build())
2) 禁用项目RecyclerView 的动画制作程序
mActivityTestRule.activity.findViewById<RecyclerView>(R.id.items_rcv).itemAnimator = null
您可以创建一个CountingIdlingResource,在填充列表之前递增,在完成所有操作之后递减。
只需记得在你的@Before和@After上注册IdlingResource,就像一样
IdlingRegistry.getInstance().register(rule.getIdlingResource()); //before
IdlingRegistry.getInstance().unregister(rule.getIdlingResource()); //after