Autox.js 中文文档 下载 App

Autox.js 布局分析器 查看屏幕上每个控件的 ID 类名 文字和层级

写不出选择器?让布局分析器帮你

当你想点击屏幕上的一个按钮,但不知道它的 text、id、className 是什么值时,布局分析器就是你的救星。它是 Autox.js 内置的控件树可视化工具,类似 Android Studio 的 Layout Inspector。

打开布局分析器

三种方式:

  1. 悬浮窗:点击悬浮条上的"放大镜"图标
  2. 侧栏菜单:左侧栏 → 布局分析器
  3. 代码里:执行 auto.openLayoutInspector()

打开后,屏幕变成半透明蒙层,你可以在蒙层上滑动(部分机型需要先关闭蒙层才能操作),点击任意控件。

点一下看什么

在蒙层上点击一个按钮(比如"登录"),会弹出详情面板,展示这个控件的完整信息:

字段含义选择器写法
id资源 ID(如 com.example:id/btn_login)id("btn_login")
text显示的文字text("登录")
className类名(如 android.widget.Button)className("Button")
desccontentDescriptiondesc("登录")
bounds坐标范围 [left, top, right, bottom]坐标操作用
depth在控件树里的层级深度父子遍历时有用
childCount子控件数量辅助定位

实战:生成选择器代码

假设你点了一个按钮,布局分析器显示:

id:     com.example.app:id/confirm_btn
text:   确定
class:  android.widget.Button
desc:   null

方案一:用 id(最精准,首选)

id("confirm_btn").click();

id 是控件唯一的标识符,稳定性最好。但要注意:系统控件和第三方 App 的自定义控件可能没有 id,或者 id 是自动生成的(如 android:id/0x7f...),这种 id 下次 App 更新可能变。

方案二:用 text(最直观)

text("确定").click();

text 最容易理解,但稳定性差——如果 App 改成"确认"、"OK"、"好的",脚本就失效了。中文 App 尤其要注意这个。

方案三:class + text 组合(平衡方案)

className("Button").text("确定").click();

同时匹配类名和文字,比单独用 text 更精准,能避免点到其他同名文字的控件。

方案四:desc(无障碍描述)

desc("确认按钮").click();

contentDescription 是开发者为残障用户添加的描述文本,很多 App 没填这个字段,但如果有,稳定性和 id 差不多。

层级遍历:找父控件或子控件

布局分析器还能让你看到控件树的父子关系。比如一个按钮嵌套在一个卡片容器里:

FrameLayout
  └── LinearLayout (id: card)
        └── TextView (text: 标题)
        └── Button (text: 确定)  ← 我要点这个

你可以从父控件往下找,或者从子控件往上找:

// 从父容器下找 Button
id("card").findOne().findOne(className("Button")).click();

// 或直接用层级关系
let btn = id("card").findOne();
btn.descendants().filter(c => c.className() === "Button").forEach(c => c.click());

实战建议

  1. 点了没反应:某些游戏或全屏 App 的控件树不暴露,布局分析器也读不到——这时候需要切换到图像识别方案
  2. 每次都重样:如果 App 里的 id 是随机生成的,放弃 id 方案,改用 class + text 或 bounds
  3. 相似控件太多:两个 Button 都叫"确定",可以加上层级约束(哪个在上面/哪个在哪个父容器里)

布局分析器 vs 录制器

对比布局分析器悬浮窗录制
目的查看控件属性记录操作动作
输出控件详情信息完整 JS 脚本
使用时机写脚本时查参数不知道怎么写时让它帮你写
学习效果理解选择器 API快速上手

实际开发中,两者配合最好:先录制一版 → 看生成的代码 → 对不确定的控件用布局分析器核实 → 手动优化。