Использование 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>