Я пытаюсь отправить события касания на устройство с помощью AndroidDebugBridge, чтобы выполнить базовую автоматизацию тестов пользовательского интерфейса. Я следил за обсуждением в LINK . Я могу использовать sendevent для имитации прикосновения к эмуляторам, но не могу сделать то же самое на устройстве.
Как и в приведенной выше ссылке, эмулятор, похоже, отправляет 6 событий для каждого касания (xcoord, ycoord, 2 для нажатия, 2 для выпуска), и эту информацию было легко использовать для отправки событий, но getevent для сенсорного экрана для устройства, похоже, генерировать слишком много событий.
У кого-нибудь получилось отправить тач с ADB на девайс? Не могли бы вы поделиться решением.
android
automation
adb
touchscreen
Харкиш
источник
источник
Ответы:
Android поставляется с
input
инструментом командной строки, который может моделировать различные события ввода. Чтобы имитировать постукивание, это:input tap x y
Вы можете использовать оболочку adb (> 2.3.5) для удаленного запуска команды:
adb shell input tap x y
источник
Чтобы выполнить определенное действие (например, открыть веб-браузер), вам нужно сначала выяснить, куда нажать. Для этого вы можете сначала запустить:
После того, как вы нажмете на устройство в нужном месте, вы увидите следующий результат:
<...> /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
источник
adb shell input tap $((16#2f5)) $((16#69e))
. Также, чтобы быть педантичным, 0x2F5 и 0x69E - это 757 и 1694 соответственно ... Что вы использовали для преобразования между базами?adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'
которая получает положение касания как целое число2.3.5 не было
input tap
, простоinput keyevent
иinput text
вы можете использовать для этого monkeyrunner: (это копия ответа на https://stackoverflow.com/a/18959385/1587329 ):$ monkeyrunner >>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice >>> device = MonkeyRunner.waitForConnection() >>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
источник
Вам не нужно использовать
, вам просто нужно включить в параметрах разработчика на устройстве [Показать данные касания], чтобы получить X и Y.
Дополнительную информацию можно найти в моей статье здесь: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
источник
Рассмотрите возможность использования Android uiautomator с оболочкой adb uiautomator [...] или напрямую с использованием .jar, который поставляется с SDK.
источник
Основываясь на ответе Томаса, это лучший способ найти положение касания местоположения как целое число, которое я нашел:
adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'
Используйте
adb shell getevent -l
для получения списка событий, используя grep forABS_MT_POSITION
(получает строку с событиями касания в шестнадцатеричном формате) и, наконец, используйте awk для получения соответствующих шестнадцатеричных значений, удаления из них нулей и преобразования шестнадцатеричного числа в целое число. Это постоянно печатает координаты x и y в терминале, только когда вы нажимаете на устройство.Затем вы можете использовать эту команду оболочки adb для отправки команды:
adb shell input tap x y
источник