Espresso – typeText не работает

Я пытаюсь ввести текст внутри EditText:

public void testSearch() { onView(withId(R.id.titleInput)).perform(typeText("Engineer")); onView(withId(R.id.titleInput)).check(matches(withText("Engineer"))); } 

Я вижу, что EditText получает фокус, но ничего не происходит. Текст не печатается.
Я попробовал это на телефоне и эмуляторе – тот же результат.

Похоже, я разобрался в этом вопросе. Это связано с аппаратной и программной клавиатурой.

Для эмуляторов:

Перейдите в «Настройки» -> «Язык и ввод» -> переключите ввод по умолчанию на образец мягкой клавиатуры.

Для телефонов:

Установите программную клавиатуру из магазина Play и переключитесь на нее. Похоже, что нативные клавиатуры некоторых телефонов не работают.

Он работает сейчас.

Вы можете обойти проблему, вызвав setText в EditText.

  final EditText titleInput = (EditText) activity.findViewById(R.id.titleInput); getInstrumentation().runOnMainSync(new Runnable() { public void run() { titleInput.setText("Engineer"); } }); 

Если EditText еще не имеет фокуса, сначала нажмите на него. Если это решает вашу проблему, тогда нет ошибки.

 onView(withId(R.id.titleInput)).perform(click()).perform(typeText("Engineer")); 

Имел ту же самую проблему, используя 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"))); } 

Вы можете включить его в код, подобный этому,

OnView (withId (R.id.titleInput)). Выполнить (click (), replaceText («Инженер»), closeSoftKeyboard ());

Если вы используете Genymotion, вам может потребоваться переключить клавиатуру по умолчанию в конфигурацию Genymotion (это приложение на эмуляторе).

  1. Перейдите в Приложения -> Конфигурация Genymotion -> Клавиатура -> Виртуальная клавиатура (нажмите «Да», когда вам будет предложено перезагрузить компьютер)

ПРИМЕЧАНИЕ. Эти изменения не сохраняются после закрытия эмулятора. Вам нужно будет установить это каждый раз при запуске эмулятора.