Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用浓缩咖啡测试Android应用程序时出现AmbiguiousViewMatceException_Android_Listview_Automated Tests_Android Espresso - Fatal编程技术网

在使用浓缩咖啡测试Android应用程序时出现AmbiguiousViewMatceException

在使用浓缩咖啡测试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

我正在测试我的一个Android应用程序,它有一个viewpager。ViewPager有2个片段。这两个框架使用与布局相同的xml。此xml中有一个ListView

当我尝试使用查找ListView时

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()方法,但这是一个丑陋的解决方案。