Ada*_*itz 7 java android android-espresso
我正在运行 Espresso 测试以单击 RecyclerView 的一个元素。
onView(withId(R.id.recyclerList)).perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:java.lang.IllegalStateException: No view holder at position
我检查了视图 id 指向我的 RecyclerView 并且我的依赖项如下:
好吧,我想我也遇到了同样的问题并且我设法解决了它。
问题是,除非您使用 AsyncTask填充 RecyclerView,否则 Espresso不会等待后台线程完成后再执行下一个操作。
因此,它将搜索位置 2 处的项目,并且由于您的后台线程仍在运行并且回收器视图尚未加载,因此它将返回 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
}
Run Code Online (Sandbox Code Playgroud)
解决此问题的更好(且正确)的解决方案是使用Idling Resources。
这个简短的视频确实帮助我了解了如何使用 IdlingResources(特别是 CountingIdlingResources)。
您的 ui 测试现在应该类似于:
@Test
public void myTest() {
registerIdlingResources(/*put your IdlingResource here*/);
onView(withId(R.id.recyclerList))
.perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));
//assert something
}
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助。
| 归档时间: |
|
| 查看次数: |
1460 次 |
| 最近记录: |