Как отправить ключевые события на безголовый эмулятор в тесте инструментовки? - PullRequest
8 голосов
/ 09 июля 2010

В настоящее время мы работаем над набором инструментальных тестов, который выполняется на нашем сервере сборки, но хотя тесты проходят на компьютере разработчика с использованием обычного эмулятора Android, сборка на сервере сборки завершается неудачно, поскольку там мы запускаем только безголовый эмулятор сфлаг -no-window.

Ошибка возникает при попытке вызвать метод InstrumentationTestCase.sendKeys(), чтобы программно открыть меню параметров.Ошибка:

В доступе отказано: ввод ключевого события из pid 646 uid 10026 в окно Window {43d55100 paused = false}, принадлежащее uid 1000

Затем мы выясниличто есть разрешение INJECT_EVENTS, но установка его в манифесте не имела никакого эффекта.Фактически в журнале мы увидели этот вывод:

Не предоставление разрешения android.permission.INJECT_EVENTS для пакета com.qype.radar (protectionLevel = 2 flags = 0x6644)

Значит ли это, что это разрешение бесполезно?

Мы также пытались разрешить приложению инструментального тестирования и тестируемому приложению использовать один и тот же идентификатор пользователя Linux с помощью android:sharedUserId и работать в одном и том же процессе (android:process -- мы не были уверены, было ли это уже так), но все равно не повезло.

Означает ли это, что в настоящее время невозможно запускать контрольно-измерительные приборы, содержащие ключевые события, в эмуляторе без монитора, или мы что-то упустили?

Ответы [ 2 ]

17 голосов
/ 29 июля 2010

Я запускаю эмулятор без -no-window на безголовых машинах, сначала запустив экземпляр Xvnc (т.е. поддельный X-сервер), затем запустив эмулятор в этом DISPLAY.

Точнее, я получаю Xvnc и Android Emulator Плагины Jenkins, чтобы сделать это для меня.

К сожалению, разблокировка экрана все еще вызывает беспокойство, прежде чем вводить события пользовательского интерфейса, но это (к счастью) решаетсяавтоматический запуск такой команды (аналогично этот другой ответ, который вы видели ):
echo "event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0" | nc -q1 localhost 5554


Редактировать:
Я обнаружил, что этот метод гораздо надежнее:
adb shell input keyevent 82

Некоторая информация о коде ключа 82.

1 голос
/ 22 июля 2010

У меня была похожая проблема с моим тестом на сервере Hudson. В моем случае проблему я решил по предложению Android SDK: http://developer.android.com/guide/topics/testing/testing_android.html#UITestTroubleshooting

Важно то, что мне пришлось включить разрешения для основного приложения.

...