Как использовать ADB для отправки сенсорных событий на устройство с помощью команды SendEvent?

StackOverflow https://stackoverflow.com/questions/3437686

Вопрос

Я пытаюсь отправить сенсорные события на устройство, используя 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top