android – Espresso – 检查ListView中是否存在TextView

我想在列表中查看Save€XX的显示.保存€XX是一个可见或不可见的TextView.我使用JUnit 4和Espresso 2.2.1.

我试着像这样检查:

onView(withText(startsWith("Save"))).check(matches(isDisplayed()));

但总是得到一个错误:

android.support.test.espresso.AmbiguousViewMatcherException: 'with text: a string starting with "Save"' matches multiple views in the hierarchy.

如果使用Espresso在ListView中存在TextView,有没有办法?

UPDATE

我也试过使用onData:

onData(hasToString(startsWith("Save")))
                .inAdapterView(withId(R.id.suggestion_list_view)).atPosition(0)
                .check(matches(isDisplayed()));

但似乎onData适用于数据层,但不适用于视图层.因此,我收到错误:

java.lang.RuntimeException: No data found matching: with toString() a string starting with "Save" contained values: <[Data: ...]>

解决方法

经过几次尝试,我找到了方法.

在这种情况下,我们应该使用组合方法并使用数据和视图层.我们按ID访问ListView并选择第一项.然后检查它是否为“保存”文本.

onData(anything())
                .inAdapterView(withId(R.id.list_view))
                .atPosition(0)
                .onChildView(withId(R.id.suggestion_saving))
                .check(matches(withText(startsWith("Save"))));

奇迹般有效.请享用!

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...