gpt4 book ai didi

java - Espresso RecyclerView 错误 - 位置上没有 View 支架

转载 作者:太空狗 更新时间:2023-10-29 13:51:55 24 4
gpt4 key购买 nike

我正在运行 Espresso 测试以单击 RecyclerView 的元素。

   onView(withId(R.id.recyclerList)).perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));

但是,我收到以下错误:java.lang.IllegalStateException: No view holder at position

我检查过 View id 是否指向我的 RecyclerView,我的依赖项如下:

  • com.android.support.test.espresso:espresso-core:2.2.2
  • com.android.support.test.espresso:espresso-contrib:2.2.2

最佳答案

好的,我想我遇到了同样的问题并且我设法解决了它。

问题在于,除非您使用 AsyncTask 来填充 RecyclerView,否则 Espresso 不会在执行下一个操作之前等待后台线程完成。

因此,它会在位置 2 搜索项目,,并且由于您的后台线程仍在运行并且回收器 View 尚未加载,它会返回 IllegalStateException。

即使我不会建议使用它,您也可以通过添加 Thread.sleep()(合理的时间)来检查测试是否运行得非常快,如下所示:

    @Test
public void myTest() {

try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}

onView(withId(R.id.recyclerList))
.perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));

//assert something
}

针对此问题的更好(和正确)解决方案是使用 Idling Resources .

short and concise video确实帮助我理解了如何使用 IdlingResources(尤其是 CountingIdlingResources)。

您的 ui 测试现在应该类似于:

    @Test
public void myTest() {
registerIdlingResources(/*put your IdlingResource here*/);

onView(withId(R.id.recyclerList))
.perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));

//assert something
}

希望对您有所帮助。

关于java - Espresso RecyclerView 错误 - 位置上没有 View 支架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com