意式咖啡select包括布局的儿童

我一直在使用Espresso来进行Android应用程序的自动UItesting。 (我在工作中一直在努力寻找解决问题的办法,所以我没有确切的例子和错误,但明天早上我可以更新)。 我遇到了单个用户界面中包含多次布局的unit testingbutton的问题。 下面是一个简单的例子:

<include android:id="@+id/include_one" android:layout="@layout/boxes" /> <include android:id="@+id/include_two" android:layout="@layout/boxes" /> <include android:id="@+id/include_three" android:layout="@layout/boxes" /> 

以下是@ layout / boxes内的示例:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/button1" /> <Button android:id="@+id/button2" /> </RelativeLayout> 

我似乎无法访问包含我想要的“include_one”中的button之一,而不访问所有的三个button。

我试图访问与以下button:

 onView(allOf(withId(R.id.include_one), isDescendantOfA(withId(R.id.button1)))).perform(click()); 

 onView(allOf(withId(R.id.button1), hasParent(withId(R.id.include_one)))).perform(click()); 

这两个我从这个答案中find: onChildView和与Espresso兄弟姐妹可惜我没有任何成功!

我知道这不是很好,但是因为我不在工作电脑上,所以我不能告诉你我碰到的确切的错误,但是我遇到过:

 com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException 

还有一个错误,告诉我没有find匹配。

我使用的代码是有道理的,虽然我是使用Espresso的新手谁能提供一些build议,或指出我可能会误解?

Solutions Collecting From Web of "意式咖啡select包括布局的儿童"

当尝试在相同的布局中多次<include/>相同的自定义xml时,这是一个常见的陷阱。

如果你现在尝试打电话

 Button button1 = (Button) findViewById(R.id.button1); 

由于boxes.xml包含多次,因此总会得到第一个子布局中的button,而不会再有另一个。

你非常接近,但你需要使用withParent()视图匹配器。

 onView(allOf(withId(R.id.button1), withParent(withId(R.id.include_one)))) .check(matches(isDisplayed())) .perform(click());