ID、类名与包名选择器——更稳定的控件定位方式
resource-id(资源 ID)
每个 Android 控件在源码里可以赋一个唯一 ID,布局分析器里显示为类似 com.taobao.taobao:id/rl_search 的值。
id("rl_search").click(); // 简写(可能有重名风险)
id("com.taobao.taobao:id/rl_search").click(); // 完整写法,推荐
优点:稳定,APP 改版通常不会随意改 ID(改 ID 会破坏其他引用)。
缺点:不是所有控件都有 ID,部分动态生成的控件 ID 为空或每次不同。
查看 ID
布局分析器里点目标控件,属性详情里的 id 字段就是完整 ID,点一下复制。
实战
// 淘宝搜索框
id("com.taobao.taobao:id/rl_search").click();
sleep(300);
setText("连衣裙");
className(类名)
按控件类型匹配:
className("android.widget.Button").click();
className("android.widget.ImageView").click();
className("android.widget.EditText").findOne(); // 找第一个输入框
优点:不依赖具体 APP,通用性强。缺点:太泛,一个界面上可能有几十个 ImageView。
配合其他条件缩小范围
// 找到一个既是 Button、又是「确定」按钮的控件
className("Button").text("确定").click();
packageName(包名)
按控件所属的包过滤——在跨应用场景有用:
packageName("com.taobao.taobao").className("Button").click();
通常不需要单独用 packageName,因为 Auto.js 已经只看当前前台应用的控件。
综合选择器(组合匹配)
多种条件链式组合,优先级更高:
// 找到同时满足这三个条件的控件
id("btn_submit")
.className("android.widget.Button")
.textContains("提交")
.click();
链式组合是 Auto.js 选择器最强大的用法——条件越精确,匹配越准。
优先级建议
定位控件时的推荐优先级:
- resource-id(最稳、最精确)
- text + className 组合
- textContains 或 descContains
- className + bounds(限制在某个区域内)
- 纯 className(兜底,最差选择)
- 坐标点击(最后手段)