adb shell
控制台是否可以使用id访问安卓应用程序的特定按钮?或者短信?
我正在尝试自动点击设备上的按钮。这是一个从浏览器访问的web应用程序。所以,如果我有那个按钮的id,我能给那个按钮发送一个动作吗?
发布于 2013-09-20 22:00:21
发布于 2018-04-25 16:43:04
提供资源ID、文本和UI元素的界限。可以使用XML查看器或Chrome浏览器获得更好的文件视图。
adb pull $(adb shell uiautomator dump | grep -oP '[^ ]+.xml') /tmp/view.xml
可以提取UI元素的边界,并计算中间点。根据需要将text=
替换为resource-id=
或content-desc=
。
coords=$(perl -ne 'printf "%d %d\n", ($1+$3)/2, ($2+$4)/2 if /text="MY_BUTTON_TEXT"[^>]*bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/' /tmp/view.xml)
现在我们在$coords
中有了UI元素中心的坐标,我们只需要发送一个tap事件。
adb shell input tap $coords
发布于 2019-01-23 19:15:35
是的,你可以,虽然它不漂亮。
您可以使用以下命令获得视图层次结构:
adb exec-out uiautomator dump /dev/tty
,它将输出作为XML文件打印到屏幕上。不幸的是,它不是有效的XML,因为有一些附加的文本。让我们把它过滤掉:
adb exec-out uiautomator dump /dev/tty | awk '{gsub("UI hierchary dumped to: /dev/tty", "");print}'
现在我们得到了一个有效的XML。让我们通过XPath来运行这个过程:
adb exec-out uiautomator dump /dev/tty | awk '{gsub("UI hierchary dumped to: /dev/tty", "");print}' | xpath '//node[@resource-id="com.example:id/btnDone"]' 2> /dev/null
,它将搜索所有具有特定ID的节点。现在,您得到了该节点,您可以在这方面做更多的工作。
如果只获得视图,就必须这样做:
adb exec-out uiautomator dump /dev/tty | awk '{gsub("UI hierchary dumped to: /dev/tty", "");print}' | xpath '//node[@resource-id="com.example:id/btnDone"]/@bounds' 2> /dev/null | awk '{$1=$1};1' | awk '{gsub("bounds=", "");print}' | awk '{gsub("\"", "");print}'
,它随后清理字符串,只输出[294,1877][785,1981]
。
特定节点的来源是:
<node index="1" text="Let’s get started!" resource-id="com.example:id/btnDone" class="android.widget.Button" package="com.example" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[294,1877][785,1981]" />
https://stackoverflow.com/questions/18924968
复制相似问题