android-espresso - 使用带有动态元素ID的espresso android进行DropDown值选择

标签 android-espresso

PopupWindow$PopupViewContainer(@xxxxxxxx)
--ListPopupWindow$DropDownListView(@yyyyyyyy)
  --RelativeLayout(@zzzzzzz)
    ImageView
    TextView
  --RelativeLayout(@aaaaaaaa)
    ImageView
    TextView
  --RelativeLayout(@aaaaaaaa)
    ImageView
    TextView

我想知道如何使用espresso android自动化访问RelativeLayout 2中的TextView,因为@id不存在,并且值是动态分配的。

上面是下拉列表,我想单击第二个选择。

例如,当我们在任何搜索框中搜索项目时,我们都会填充列表。我想单击列表中的第二个。所有的元素ID都是动态的。

最佳答案

您也许可以做到

onData(anything())
    .atPosition(1)
    .perform(click());

但是,这仅假设一个适配器 View 。如果还有其他人,则需要以某种方式挑选ListPopupWindow$DropDownListView

我知道您说过所有ID都是动态的,但是是否有一些祖先 View 可以通过ID进行选择?如果是这样,您可以做类似的事情
onData(anything())
    .inAdapterView(isDescendantOfA(withId(someAncestorId)))
    .atPosition(1)
    .perform(click());

作为最后的选择,我们可以在类名上进行匹配,但这有点脆弱:
onData(anything())
    .inAdapterView(withClassName(equalTo(
        "android.widget.ListPopupWindow$DropDownListView")))
    .atPosition(1)
    .perform(click());

关于android-espresso - 使用带有动态元素ID的espresso android进行DropDown值选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29438569/

相关文章:

android - 当许多在层次结构中时,Espresso 匹配第一个元素

android - 如何用 espresso 测试 DeepLinks

android - 如何使用 espresso 测试矢量绘图

android - 如何在 Firebase 测试实验室中执行指定的测试套件类

android - 为什么 google 声明 UI 测试时应禁用动画?

android - Espresso 检查 View 要么 doesNotExist 要么 not isDisplayed

android-testing - 等待查看带有 Espresso 的寻呼机动画?

android - 使用 Espresso 测试启动 Activity Intent

android - 使用 espresso 在导航菜单中向下滚动

android - 如何在 Android 仪器测试中删除应用程序的同步帐户