我正在使用Espresso来测试具有多个AutoCompleteTextViews的应用。对于一个特定的测试,会出现自动完成弹出窗口,但我想忽略它并移动到下一个TextView
。我怎样才能做到这一点?我的想法是模拟一个" Back"在弹出窗口中按或模拟一个水龙头。
更新
我正在尝试以下操作来点击自动完成弹出窗口:
onView(withId(R.id.brand_text))
.perform(scrollTo(), typeText(card.getBrand()));
onData(allOf(is(instanceOf(String.class)), is(card.getBrand())))
.inRoot(isPlatformPopup())
.perform(click());
onView(withId(R.id.brand_text))
.check(matches(withText(card.getBrand())));
现在的问题是,在某些情况下,输入的文字没有任何自动完成匹配,因此不会显示弹出窗口。如何根据视图是否匹配来有条件地执行单击?
答案 0 :(得分:0)
我的解决方案是将UI Automator中的UiDevice
对象添加到我的测试中:
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
然后我致电UiDevice.pressEnter()
前进到下一个TextView
。
device.pressEnter();
遇到的问题是,这并没有开箱即用的预期效果。我还为每个View.OnKeyListener
添加了AutoCompleteTextView
来处理Enter键事件。现在我为每个视图添加一个监听器,并明确说明哪些视图请求关注于Enter键事件。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ...
brandText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) {
yearText.requestFocus();
return true;
}
return false;
}
});
//...
}
这不是理想的。最终我计划对此进行概括,可能还有一个继承自AutoCompleteTextView
的自定义组件,它按照我的预期处理Enter键。它会将焦点发送到" next"图。