首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ADB访问屏幕上的特定UI控件

使用ADB访问屏幕上的特定UI控件
EN

Stack Overflow用户
提问于 2013-09-20 20:05:47
回答 5查看 55.3K关注 0票数 22

adb shell控制台是否可以使用id访问安卓应用程序的特定按钮?或者短信?

我正在尝试自动点击设备上的按钮。这是一个从浏览器访问的web应用程序。所以,如果我有那个按钮的id,我能给那个按钮发送一个动作吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-20 22:00:21

我认为你能做的最好的就是基于坐标注入触摸。

请参阅将亚行的触摸事件发送到设备亚行模拟触摸

您可以从虚拟的窗口或活动中获得按钮的坐标。

您还可以查看猴跑者

票数 9
EN

Stack Overflow用户

发布于 2018-04-25 16:43:04

提供资源ID、文本和UI元素的界限。可以使用XML查看器或Chrome浏览器获得更好的文件视图。

代码语言:javascript
运行
复制
adb pull $(adb shell uiautomator dump | grep -oP '[^ ]+.xml') /tmp/view.xml

可以提取UI元素的边界,并计算中间点。根据需要将text=替换为resource-id=content-desc=

代码语言:javascript
运行
复制
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事件。

代码语言:javascript
运行
复制
adb shell input tap $coords
票数 33
EN

Stack Overflow用户

发布于 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]" />

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18924968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档