【问题标题】:Error performing 'android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction' on view with id在具有 id 的视图上执行“android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction”时出错
【发布时间】:2018-12-20 15:48:51
【问题描述】:

有没有可能:

- 禁用回收器视图的所有动画或在 UI 线程上运行它们以使用 espresso 进行测试?

或者

- 将 idlingresources 添加到 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

【问题讨论】:

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


    【解决方案1】:

    您可以创建一个CountingIdlingResource 并在填充列表之前递增,并在全部完成后递减。

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

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

    【讨论】:

    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2022-11-23
    • 2012-01-28
    相关资源
    最近更新 更多