Как использовать ADB для отправки сенсорных событий на устройство с помощью команды sendevent? - PullRequest
75 голосов
/ 09 августа 2010

Я пытаюсь отправить сенсорные события на устройство с помощью AndroidDebugBridge, чтобы я смог выполнить некоторую базовую автоматизацию для тестов пользовательского интерфейса.Я следил за обсуждением в LINK .Я могу использовать sendevent для симуляции касания на эмуляторах, но не могу сделать то же самое на устройстве.

Как и в приведенной выше ссылке, эмулятор, по-видимому, отправляет 6 событий для каждого касания (xcoord, ycoord, 2 для печати, 2 для выпуска), и эту информацию было легко использовать для отправителей, но как длясенсорный экран для устройства, кажется, генерирует слишком много событий.

Кому-нибудь удалось отправить сенсорный сигнал из ADB на устройство?Не могли бы вы поделиться решением.

Ответы [ 5 ]

116 голосов
/ 22 марта 2011

Android поставляется с input инструментом командной строки, который может имитировать различные события ввода.Для имитации постукивания это:

input tap x y

Вы можете использовать оболочку adb (> 2.3.5) для удаленного запуска команды:

adb shell input tap x y
49 голосов
/ 14 апреля 2015

Чтобы выполнить определенное действие (например, открыть веб-браузер), вам необходимо сначала выяснить, где нажать.Чтобы сделать это, вы можете сначала выполнить:

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

adb говоритЕсли вы нажали клавишу (кнопка вниз) в позиции 2f5, 69e в шестнадцатеричном формате, что составляет 757 и 1694 в десятичном виде.

Если вы хотите создать то же событие, вы можете использовать команду вводата же позиция:

adb shell input tap 757 1694

Более подробную информацию можно найти по адресу:

https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html

11 голосов
/ 23 сентября 2013

2.3.5 не было input tap, просто input keyevent и input text Вы можете использовать для этого обезьянью бегунку: (это копия ответа на 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)

Вы также можете перетащить, запустить активацию и т. Д. Посмотрите на API для MonkeyDevice .

4 голосов
/ 21 августа 2016

Вам не нужно использовать

adb shell getevent -l

, вам просто нужно включить в настройках разработчика на устройстве [Показать данные касания], чтобы получить X и Y.

Дополнительную информацию можно найти в моей статье здесь: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/

4 голосов
/ 16 июня 2013

Рекомендуется использовать uiautomator для Android , с uiautomator оболочки adb [...] или напрямую использовать .jar, поставляемый с SDK.

...