2015-02-04 3 views
3

В моих тестах пользовательского интерфейса я устанавливаю текст двух UiObjects в верхней части экрана и нажимаю на третий объект UiObject, расположенный в нижней части экрана. На некоторых устройствах (например, мой Nexus 6 работает 5.0) это работает отлично. Текст установлен, UiObject в нижней части экрана по-прежнему отображается, и он успешно нажат.Обнаружение или подавление клавиатуры в тестах UiAutomator

На других устройствах (например, мой Nexus 4 работает 4.4) вызов setText на UiObjects вызывает мягкую клавиатуру, которая скрывает третий UiObject в нижней части экрана и препятствует его нажатию.

Я рассмотрел использование UiDevice.pressBack(), чтобы убрать клавиатуру, но проблема в том, что клавиатура отображается на некоторых устройствах, а не на других. Нажатие на устройства, которые не показывают клавиатуру, вызывает другое поведение, которое приводит к сбою теста.

Я также рассмотрел использование UiDevice.pressEnter() в качестве решения. Я решил, что это отклонит клавиатуру, если она будет видна, и ничего не сделает, если это не так (лучше всего из двух миров). Проблема в том, что клавиатура, показанная UiAutomator, когда она запускает мои тесты, не имеет кнопки «enter», у нее есть «следующая» кнопка. Это противоречит тому, как у меня есть фактическая настройка элементов пользовательского интерфейса в коде. Когда я тестирую это вручную, клавиатура показывает кнопку «Ввод», как ожидалось. Однако, поскольку UiAutomator видит «следующую» кнопку, это функциональность, которую она выполняет. Фокус просто переходит к следующему объекту UiObject, и клавиатура все еще видна.

Так что я пытаюсь удалить клавиатуру, если она видна, не рискуя нажимая кнопку «Назад», если это не так. Есть ли способ определить, показывает ли он или нет? Или еще лучше, никогда не показывать это в первую очередь?

ответ

2

Различные устройства имеют разные пакеты, и функция клавиатуры может отличаться.
Таким образом, детали могут быть не одинаковыми.

шаги, перечисленные ниже успеха в Android 4.0+ на моем устройстве:

  1. Отключение пакетов по сравнению с методом ввода с клавиатуры.

    Команды перечислены здесь:

    adb root 
    adb shell pm disable com.google.android.apps.inputmethod.hindi 
    adb shell pm disable com.google.android.inputmethod.korean 
    adb shell pm disable com.google.android.inputmethod.pinyin 
    adb shell pm disable com.google.android.inputmethod.latin 
    adb shell pm disable jp.co.omronsoft.iwnnime.ml 
    pause 
    

    Примечание: Некоторые имя пакета, как «com.google.android.inputmethod.pinyin» не может существовать в устройстве. Используйте эту команду, чтобы проверить:

    adb shell pm list packages inputmethod 
    
  2. Отключить «Google голосовой ввод»

    «Google голосовой ввод» все еще может всплывать клавиатуры.

    Если вы хотите отключить клавиатуру:

    Перейти в раздел Настройки → Программы → Запуск (или все) → "Google Клавиатура" → Настройки → Отключить "Google Голосовой ввод".

Примечание: Если вы хотите включить клавиатуру, запустите команду:

adb shell pm enable com.google.android.inputmethod.latin 
+0

Я надеялся на что-то, что я мог бы сделать в коде, так как мои тесты - это всего лишь несколько из многих, которые запускаются на устройстве. Думаю, я мог бы поместить мой в отдельный пакет и запустить команды adb перед моими испытаниями, а затем снова включить пакеты клавиатуры. Это не совсем то, на что я надеялся, но это лучший вариант. Благодарю. –

0

Думаю, я нашел способ пройти тесты, чтобы просто прокрутить экран вниз. В моем случае пользовательский интерфейс имеет прокрутку, поэтому это работает.

UiScrollable layout = new UiScrollable(new UiSelector().resourceId(...)); 
layout.scrollForward(5); 

Я размещаю это на случай, если это поможет кому-либо в аналогичной ситуации. На самом деле это не отвечает на мой вопрос, поэтому я не принимаю это.

0

Я думаю, может быть, вы можете попробовать это: Написать if() на этом этапе, если не удается найти UiObject в том, что вид, затем UiDevice.pressBack().

+0

Я думаю, что это работа, похожая на ответ, который я опубликовал. Спасибо за публикацию, надеюсь, это будет полезно для всех, кто сталкивается с подобной проблемой. –