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. Я удалил это, и это решило.