Robolectric / Espresso: Как выполнить ввод новой строки в EditText? - PullRequest
0 голосов
/ 21 февраля 2020

Я использую Robolectri c (4.3.1) с Espresso (3.2.0) для тестов активности.

Я хочу выполнить следующие действия в моем представлении EditText:

  • Введите текст
  • Нажмите enter
  • Введите другой текст

Я пытался сделать это, используя:

onView(withId(R.id.my_edit_text)).perform(
                    typeText("Some text."),
                    pressKey(KeyEvent.KEYCODE_ENTER),
                    typeTextIntoFocusedView("Other text."));

(протестировано действие запускается через ActivityScenario)

В результате получается строка «Некоторый текст. Другой текст», но я ожидал «Некоторый текст. \ nДругие текст».

(Я также пытался pressImeActionButton() с тем же результатом)

Когда я преобразую свой тест в реальный инструментальный тест без Robolectri c, я получаю символ новой строки, как и ожидалось.

Это известная проблема в Robolectri c ? Или я что-то не так делаю?

РЕДАКТИРОВАТЬ: Я создал репозиторий Github, который воспроизводит проблему (наряду с аналогичной проблемой, с которой я столкнулся, когда пытался использовать closeSoftKeyboard()): https://github.com/JanaFlauschata/robolectric_bugs

1 Ответ

0 голосов
/ 21 февраля 2020

Если вы не изменили поведение KEYCODE_enter / и используете клавиатуру по умолчанию, он должен записать другой текст в следующую строку. Я попробовал это сам, и, похоже, это сработало.

 @Test
  public void testNew2() {
    onView(withId(R.id.my_edit_text)).perform(
        typeText("Some text."),
        pressKey(KeyEvent.KEYCODE_ENTER),
        typeTextIntoFocusedView("Other text."));;
    assertDisplayed("Some text. \nOther text. "); //Use your own matcher
  }

Поймите, что даже если ваше приложение правильно пишет текст на следующую строку, ваше утверждение все равно будет неверным, поскольку перед \ n есть дополнительный пробел , Это текст редактирования, который я использовал. Чтобы быть в безопасности и не заботиться о пробелах, вы также можете использовать Contains

<EditText
      android:id="@+id/my_edit_text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"/>

Пока поведение клавиатуры ваш текст редактирования не изменился или это от поставщика, я не знаю этого должно сработать. Вы проверяли, записан ли текст в одну строку, или вы просто предполагали, что он находится в одной строке, потому что ваше утверждение не сработало?

...