如何通过Espresso匹配ExposedDropdownMenu并选中第一项?OnView与OnData方法均无效
针对你遇到的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,提问作者العبد
相关产品推荐
相关产品推荐

