问题
I have ListView
with pictures and text. When I try to click item, I get error
android.support.test.espresso.AmbiguousViewMatcherException: 'with id: com.cifrasoft.telefm:id/cardsGridView' matches multiple views in the hierarchy.
Problem views are marked with '****MATCHES****' below.
I use the following code:
onData(hasToString(startsWith("Item Text")))
.inAdapterView(withId(R.id.cardsGridView))
.perform(click());
Can I click ListView
using position of Adapter
, without matches or startWith
?
回答1:
Try with atPosition(). e.g.
onData(hasToString(startsWith("Item Text")))
.inAdapterView(withId(R.id.cardsGridView)).atPosition(0)
.perform(click());
with index 0, it will click on the first matching view found.
回答2:
Use Record Test to obtain the ViewInteraction of the list then obtain the view and use performItemClick as follows:
AtomicReference<ListView> resultView = new AtomicReference<>(null);
ViewInteraction viewInteraction1 = onView( ... withId(R.id.my_list_id), ...);
viewInteraction1.check(((view, noViewFoundException) -> {
if(noViewFoundException != null){
return;
}
resultView.set((ListView) view);
}));
if(resultView.get() != null){
ListView listView = resultView.get();
activity.runOnUiThread(()->{
listView.performItemClick(
listView.getAdapter().getView(index, null,null),
index,
listView.getAdapter().getItemId(index));
});
}
来源:https://stackoverflow.com/questions/28019843/android-espresso-listview-click-item