Espresso - typeText не работает
Я пытаюсь ввести текст внутри EditText:
public void testSearch() {
onView(withId(R.id.titleInput)).perform(typeText("Engineer"));
onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
}
Я вижу, что EditText получает фокус, но ничего не происходит. Текст не печатается.
Я попробовал это на телефоне и эмуляторе - тот же результат.
Ответы
Ответ 1
Похоже, я разобрался в этом вопросе. Это связано с аппаратной и программной клавиатурой.
Для эмуляторов:
Перейдите в "Настройки" → "Язык" и "Enter" → переключите ввод по умолчанию на образец мягкой клавиатуры.
Для телефонов:
Установите программную клавиатуру из магазина Play и переключитесь на нее. Похоже, что нативные клавиатуры некоторых телефонов не работают.
Теперь он работает.
Ответ 2
Вы можете обойти проблему, вызвав setText в EditText.
final EditText titleInput = (EditText) activity.findViewById(R.id.titleInput);
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
titleInput.setText("Engineer");
}
});
Ответ 3
Если у EditText еще нет фокуса, сначала нажмите на него. Если это решает вашу проблему, тогда нет ошибки.
onView(withId(R.id.titleInput)).perform(click()).perform(typeText("Engineer"));
Ответ 4
Имел ту же проблему с использованием Espresso 2. В качестве обходного пути я использую replaceText вместо typeText.
public void testSearch() {
onView(withId(R.id.titleInput)).perform(click(), replaceText("Engineer"));
onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
}
Ответ 5
Вы можете включить его в код, подобный этому,
onView (withId (R.id.titleInput)). выполнить (click(), replaceText ( "Engineer" ), closeSoftKeyboard());
Ответ 6
Та же проблема решена с помощью следующего:
myField.perform(scrollTo(), click(), clearText(), typeText(myInput))
Интересно, что у меня когда-либо возникали проблемы только тогда, когда моя машина усердно работала.
Ответ 7
Если вы используете Genymotion, вам может потребоваться переключить клавиатуру по умолчанию в конфигурацию Genymotion (это приложение на эмуляторе).
- Перейдите в Приложения → Конфигурация Genymotion → Клавиатура → Виртуальная клавиатура (нажмите "Да", когда вам будет предложено перезагрузить компьютер)
ПРИМЕЧАНИЕ. Эти изменения не сохраняются после закрытия эмулятора. Вам нужно будет установить это каждый раз при запуске эмулятора.
Ответ 8
Я исправил эту проблему, установив layout_height="wrap_content"
в представлении, которое я хотел click()
. Может быть, это может помочь кому-то здесь.
Ответ 9
для меня мой метод испытания был помечен @UiThreadTest
. Я удалил это, и это решило.