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

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

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

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

Ответ 1

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

input tap x y

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

adb shell input tap x y

Ответ 2

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

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

Ответ 3

2.3.5 не было input tap, просто input keyevent и input text Вы можете использовать для этого monkeyrunner: (это копия ответа на fooobar.com/questions/91057/...):

Возможно, вы захотите использовать monkeyrunner следующим образом:

$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)

Вы также можете выполнить перетаскивание, начать работу и т.д. Посмотрите на api для MonkeyDevice.

Ответ 4

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

adb shell getevent -l

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

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

Ответ 5

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