pressKey() 操作将调用 TextView.OnEditorActionListener

pressKey() action will on invoke TextView.OnEditorActionListener

假设我有一个 Activity 具有这样的设置:

EditText edtDeviceName;

@Override
public void onResume() {
    super.onResume();

    edtDeviceName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE || event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                // Do something.
            }
        }
    }
}

我想用 Espresso 测试一下:

onView(withId(R.id.edtDeviceName)).perform(replaceText("DeviceName"));
onView(withId(R.id.edtDeviceName)).perform(pressKey(new EspressoKey.Builder().withKeyCode(KeyEvent.KEYCODE_ENTER).build()));

那么TextView.OnEditorActionListener方法onEditorAction将不会被调用。

使用 Espresso 时有什么特殊要求吗?

这仅在视图真正聚焦时才有效,如下所示:

onView(withId(R.id.edtDeviceName)).perform(click());

之后,对 pressKey 的调用将在视图中结束并触发操作。