Использование ADB для доступа к определенному элементу управления UI на экране
возможно adb shell
консоль для доступа к конкретной кнопке приложения Android с помощью его идентификатора? или СМС?
Я пытаюсь автоматизировать нажатие кнопки на устройстве. Это веб-приложение, доступ из браузера. Итак, если у меня есть этот идентификатор кнопки, могу ли я отправить действие на эту кнопку?
3 ответов
Я думаю, что лучшее, что вы можете сделать, это ввести касание на основе координаты.
см. отправить сенсорное событие из ADB на устройство и имитация касания с помощью ADB
вы можете получить координату кнопки из окна или действия dumpsys.
вы также можете проверить помощью MonkeyRunner.
UI automator дает идентификаторы ресурсов, текст и границы элемента UI. Для лучшего просмотра файла можно использовать средство просмотра XML или браузер Chrome.
adb pull $(adb shell uiautomator dump | grep -oP '[^ ]+.xml') /tmp/view.xml
границы элемента пользовательского интерфейса могут быть извлечены, а средняя точка может быть вычислена. Заменить text=
С resource-id=
по мере необходимости.
coords=$(perl -ne 'printf "%d %d\n", (+)/2, (+)/2 if /text="MY_BUTTON_TEXT"[^>]*bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/' /tmp/view.xml)
теперь у нас есть координаты центра элемента UI в $coords
и нам просто нужно отправить событие tap.
adb shell input tap $coords
вы не сможете использовать идентификатор кнопки, но вы можете получить координаты кнопки и имитировать событие крана.
Android поставляется с инструментом командной строки ввода, который может имитировать различные события ввода. Чтобы имитировать нажатие, используйте:
input tap x y
вы можете использовать оболочку adb для удаленного запуска команды:
adb shell input tap x y
другие варианты:
shell@m0:/ $ input
input
usage: input ...
input text <string>
input keyevent <key code number or name>
input [touchscreen|touchpad|touchnavigation] tap <x> <y>
input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)]
input trackball press
input trackball roll <dx> <dy>