Cha*_*ham 35 android android-testing android-espresso
我试图使用Espresso点击列表视图中的文本.我知道他们有这个指南,但我看不到如何通过查找文本来完成这项工作.这就是我尝试过的
Run Code Online (Sandbox Code Playgroud)Espresso.onData(Matchers.allOf(Matchers.is(Matchers.instanceOf(ListView.class)), Matchers.hasToString(Matchers.startsWith("ASDF")))).perform(ViewActions.click());
正如所料,这不起作用.错误表示层次结构中没有视图.有谁知道如何选择一个字符串?("ASDF"
在这种情况下)提前谢谢.
我收到错误:
com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException:'可从类中分配:class android.widget.AdapterView'匹配层次结构中的多个视图.
有了这段代码
Run Code Online (Sandbox Code Playgroud)onData(hasToString(startsWith("ASDF"))).inAdapterView(withContentDescription("MapList")).perform(click());
我收到这个错误
com.google.android.apps.common.testing.ui.espresso.PerformException:在视图'上执行'加载适配器数据'时出错,内容描述为:"MapList"'.
引起:java.lang.RuntimeException:找不到匹配的数据:asString(以"ASDF"开头的字符串)
昂达(任何()).inAdapterView(withContentDescription( "降序")).atPosition(X).perform(点击())
haf*_*fax 43
问题是,您尝试将列表视图本身与instanceOf(ListView.class)
as参数匹配onData()
.onData()
需要匹配的调整数据的数据匹配ListView
,而不是ListView
它本身,也并非View
是Adapter.getView()
返回,但实际的数据.
如果您的生产代码中有类似的内容:
ListView listView = (ListView)findViewById(R.id.myListView);
ArrayAdapter<MyDataClass> adapter = getAdapterFromSomewhere();
listView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
然后Matcher参数Espresso.onData()
应匹配所需的实例MyDataClass
.所以,这样的事情应该有效:
onData(hasToString(startsWith("ASDF"))).perform(click());
Run Code Online (Sandbox Code Playgroud)
(你可以使用另一种Matcher方法org.hamcrest.Matchers
)
如果您的活动中有多个适配器视图,您可以ViewMatchers.inAdapterView()
使用视图匹配器调用,指定AdapterView,如下所示:
onData(hasToString(startsWith("ASDF")))
.inAdapterView(withId(R.id.myListView))
.perform(click());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28430 次 |
最近记录: |