在使用浓缩咖啡测试Android应用程序时出现AmbiguiousViewMatceException
我正在测试我的一个Android应用程序,它有一个viewpager。ViewPager有2个片段。这两个框架使用与布局相同的xml。此xml中有一个ListView 当我尝试使用查找ListView时在使用浓缩咖啡测试Android应用程序时出现AmbiguiousViewMatceException,android,listview,automated-tests,android-espresso,Android,Listview,Automated Tests,Android Espresso,我正在测试我的一个Android应用程序,它有一个viewpager。ViewPager有2个片段。这两个框架使用与布局相同的xml。此xml中有一个ListView 当我尝试使用查找ListView时 onData(anything()) .inAdapterView(withId(R.id.listview)) .atPosition(4) .perform(click());" 我得到了一个A
onData(anything())
.inAdapterView(withId(R.id.listview))
.atPosition(4)
.perform(click());"
我得到了一个AmbiguiousViewMatceException,这意味着我正在尝试对一个视图执行ViewAction,该视图的副本已被Espresso找到
我遇到了一个解决方案,在这个解决方案中,我无法通过传递来识别ListView
.inAdapterView(withDesciption("desc"))
但当我使用相同的xml布局时,这将再次导致相同的异常。有什么帮助吗?你忘了告诉浓缩咖啡你到底要找哪种成分。在第四个位置,可能有多个视图。它可能是
TextView
和ImageView
——Espresso看到两个视图,所以他会错误地告诉您
要解决问题,请使用.inChildView()
匹配器说出您感兴趣的Espresso视图
下面是一个示例代码:
onData(anything())
.inAdapterView(withId(R.id.listview))
.atPosition(4)
.inChildView(withId(R.id.image))
.perform(click());
您可以使用
isdescendatofa
精确定位列表视图
,如下所示:
onData(anything())
.inAdapterView(allOf(
isDescendantOfA(withId(R.id.fragment1)),
withId(R.id.listview)))
.atPosition(4)
.perform(click());
我认为问题还不清楚。由于我有两个片段,我如何告诉Espresso我想在第一个片段中获取listview。您能描述一下您的片段-
listview
?它们是一样的吗?是否可以将他们的listview
id更改为listview1
和listView2
?最好的帮助方法是编辑文章并将布局的xml与tese一起放入两个片段不可能提供不同的id。正如我提到的,我正在重用相同的xml布局。在实例化片段时,ViewPager不允许我分配ID。我需要访问以覆盖行为的所有变量都是私有的。有指针吗?显然没有办法通过ID找到片段。可行的方法是使用标记锁定片段,但当使用FragmentStatePagerAdapter时,我也无法访问相关变量。我可能不得不从FragmentStatePagerAdapter复制整个InstanceItem()方法,但这是一个丑陋的解决方案。