You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Espresso匹配ExposedDropdownMenu并选中第一项?OnView与OnData方法均无效

解决Espresso测试ExposedDropdownMenu选中第一项的问题

针对你遇到的ExposedDropdownMenu在Espresso中无法用OnView/OnData选中第一项的问题,我来分享下可行的解决方案:

核心思路

ExposedDropdownMenu的结构是TextInputLayout包裹AutoCompleteTextView,点击AutoCompleteTextView会弹出独立的PopupWindow下拉菜单,我们需要先触发弹出动作,再指定查找范围到PopupWindow根视图,最后定位并点击第一项。

可行代码实现

// 第一步:点击AutoCompleteTextView,触发下拉菜单弹出
onView(withId(R.id.editText_driver_title))
    .perform(click())

// 方式一:已知第一项文本时,直接通过文本匹配点击
onView(withText("你的下拉第一项文本"))
    .inRoot(isPlatformPopup()) // 关键:指定在PopupWindow根视图中查找元素
    .perform(click())

// 方式二:未知文本时,通过位置匹配第一项
onView(withClassName(Matchers.equalTo(TextView::class.java.name)))
    .inRoot(isPlatformPopup())
    .atPosition(0)
    .perform(click())

为什么之前的方法不生效?

  • OnView失效原因:默认情况下Espresso只会在当前Activity的根视图内查找元素,而下拉菜单属于独立的PopupWindow,必须通过inRoot(isPlatformPopup())明确指定查找范围。
  • OnData失效原因:Material Design的ExposedDropdownMenu下拉列表并非基于传统的AdapterView(如ListView),而是用RecyclerView实现,OnData是针对AdapterView的匹配方法,自然无法生效。

额外注意点

  • 确保测试依赖中包含espresso-core和espresso-contrib(处理RecyclerView相关匹配);
  • 如果下拉菜单弹出有延迟,可添加ViewActions.waitForIdle()或IdlingResource等待UI稳定后再执行后续操作。

内容的提问来源于stack exchange,提问作者العبد

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:12:34