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
的调用将在视图中结束并触发操作。
假设我有一个 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
的调用将在视图中结束并触发操作。