Как использовать ADB для отправки сенсорных событий на устройство с помощью команды SendEvent?
-
26-09-2019 - |
Вопрос
Я пытаюсь отправить сенсорные события на устройство, используя AndroiddeBugbridge, чтобы я мог сделать некоторую базовую автоматизацию для тестов пользовательского интерфейса. Я следовал обсуждению в СВЯЗЬ. Отказ Я могу использовать SendEvent для моделирования прикосновения к эмуляторам, но не может сделать то же самое на устройстве.
Как и в вышеупомянутой ссылке, эмулятор, похоже, отправляет 6 событий для каждого прикосновения (Xcoord, ycoord, 2 для печати, 2 для выпуска), и было легко использовать эту информацию для SendEvents, но ставит GetEvent для сенсорного экрана для устройства для устройства, кажется, генерировать слишком много событий.
Кто-нибудь удалось отправить прикоснуться от ADB на устройство? Не могли бы вы поделиться решением.
Решение
Android поставляется с input
Инструмент командной строки, который может симулировать разные события ввода. Чтобы моделировать постукивание, это:
input tap x y
Вы можете использовать ADB Shell (> 2.3.5), чтобы удаленно запустить команду:
adb shell input tap x y
Другие советы
Для того, чтобы сделать конкретное действие (например, чтобы открыть веб-браузер), вам нужно сначала выяснить, где нажмите. Для этого вы можете сначала запустить:
adb shell getevent -l
После того, как вы нажмете на устройстве, в том, что вы хотите, вы увидите этот вывод:
<...>
/dev/input/event3: EV_KEY BTN_TOUCH DOWN
/dev/input/event3: EV_ABS ABS_MT_POSITION_X 000002f5
/dev/input/event3: EV_ABS ABS_MT_POSITION_Y 0000069e
АБР говорит вам, что ключ был нажата (кнопка вниз) в положении 2F5, 69E в шестнадцатеричном, который составляет 757 и 1694 в десятичном периоде.
Если вы сейчас хотите генерировать одно и то же событие, вы можете использовать команду Tap Input Tap в том же положении:
adb shell input tap 757 1694
Больше информации можно найти по адресу:
https://source.android.com/devices/input/touch-devices.html. http://source.android.com/devices/input/getevent.html.
2.3.5 не было input tap
, только что input keyevent
а также input text
Вы можете использовать Monkeyrunner для него: (это копия ответа на https://stackoverflow.com/a/18959385/1587329.):
Вы можете использовать Monkeyrunner так:
$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
Вы также можете сделать перетаскивание, начать Activies и т. Д. Посмотрите на API для Monkeydevice.
Вам не нужно использовать
adb shell getevent -l
Команда, вам просто нужно включить в параметрах разработчика на устройстве [Показать прикосновение данные], чтобы получить X и Y.
Еще одна информация можно найти в своей статье здесь: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
Подумайте об использовании Android Уоавтоматор, с ADB Shell Uiautomator [...] или непосредственно используя .jar, который поставляется с SDK.