gpt4 book ai didi

android - 包含布局的 Espresso 选择子项

转载 作者:IT老高 更新时间:2023-10-28 23:10:40 24 4
gpt4 key购买 nike

我一直在使用 Espresso 对 Android 应用进行自动化 UI 测试。 (我一直在下类回家时试图找到解决这个问题的方法,所以我没有确切的例子和错误,但我可以在明天早上更新)。我在单个用户界面中多次包含的布局中遇到了单元测试按钮的问题。下面是一个简单的例子:

<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”中的按钮一。

我已尝试使用以下方式访问按钮:

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());

我从这个答案中找到了这两个:onChildView and hasSiblings with Espresso可惜我没有成功!

我知道这不是很好,但由于我没有使用我的工作计算机,我无法告诉你我遇到的确切错误,但我遇到了:

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

还有一个错误告诉我没有找到匹配项。

我使用的代码很有意义,尽管我是使用 Espresso 的新手 谁能提供一些建议,或者指出我可能会误解什么?

最佳答案

这是尝试 <include/> 时的常见错误。在同一布局中多次使用相同的自定义 xml。

如果你现在尝试调用

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

由于 boxes.xml 被多次包含,因此您将始终得到第一个子布局中出现的按钮,而不会出现另一个。

您非常接近,但您需要使用 withParent() View 匹配器。

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

关于android - 包含布局的 Espresso 选择子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27890101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com