所以我最近开始在我现有的一个android项目中胡乱使用浓缩咖啡。
一切都很顺利,直到我发现我的程序中有AutoCompleteTextView
。我似乎不明白如何正确地单击自动完成列表中的第一项。实际上,我甚至不确定在这个例子中使用哪个,onView()
或onData()
。
最佳答案
我想我找到了一个比公认答案更干净的方法!onData(equalTo("ITEM")).inRoot(RootMatchers.isPlatformPopup()).perform(click());
故障:onData(x)
这将在下拉列表中找到呈现与x
匹配的数据对象的视图。数据由Adaptor
提供给AutoCompleteTextView
,因此它可以是Adaptor
提供的任何类型的对象,它可能不是视图。您需要使用标准的hamcrest core matchers来完成这个(equalTo
,instanceOf
等),而不是(withText
,withId
等)。试图找到这是什么对象以及如何匹配它可能会很痛苦,但没有一种更简洁的方法:适配器中有很多项,有些视图甚至还不在层次结构中,因此onView
无法工作!onData
将确保加载与数据匹配的视图。checkouthere(这是onData
返回的内容)和here(这将加载匹配的数据)inRoot(RootMatchers.isPlatformPopup())
因此,下拉菜单位于另一个窗口上,而不是您的活动所运行的默认窗口。所以我们必须指定要搜索该窗口。接受的答案使用RootMatchers.withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView())))
,它似乎与任何非默认窗口匹配。
不管怎么说是别人。