在具有 id 的视图上执行"android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAc



是否存在任何可能性:

-禁用回收器视图的所有动画,或在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

相关内容

最新更新