hamibot 中文文档 下载 App

Hamibot 控件选择器 UiSelector 基础

控件 vs 坐标

安卓界面上的按钮、文本框、列表项等都是「控件」。基于控件的操作指的是:

  1. 用选择器定位到某个控件(按 id、文本、类型等属性)
  2. 获取控件信息或对其操作(点击、长按、输入等)

这种方式的好处是不依赖屏幕分辨率——无论在什么尺寸的设备上运行,只要控件属性匹配就能找到。相比之下,基于坐标的点击在不同分辨率设备上需要做适配。

auto 系列函数

控件操作依赖无障碍服务,脚本开头通常会调用 auto() 系列函数来确保服务已启用:

函数行为
auto()检查无障碍是否已启用,没启用则跳转系统设置页并中止脚本
auto.waitFor()检查无障碍,没启用则跳转并等待用户开启后自动继续
auto('fast')启用快速模式(开启控件缓存,定位更快)
auto.setMode('fast')切换模式,不触发权限检查

推荐用 auto.waitFor()——用户开启无障碍后脚本会自动接着跑,体验更流畅。

选择器基础用法

Hamibot 兼容 AutoJS 的 id()、text()、desc()、className()、bounds() 等选择器。常用模式:

按 resource-id 选择

每个控件通常有一个唯一的 id(由开发者在写 APP 时定义)。这是最稳定的选择方式:

// 找到 id 为 "btn_submit" 的按钮
id("btn_submit").findOne().click();

按文本选择

// 找到文本为 "确定" 的控件
text("确定").findOne().click();

// 包含某段文字
textContains("下一步").findOne().click();

// 正则匹配
textMatches("提交.*").findOne().click();

按描述选择

部分控件有 contentDescription(无障碍描述),可以用 desc() / descContains() / descMatches()。

按控件类型 + 组合

// 找到第一个按钮类型的控件
className("android.widget.Button").findOne().click();

// 组合条件:id 存在 AND 文本包含
id("submit").textContains("提交").findOne().click();

查找函数

选择器链末尾加的查找函数决定行为:

函数行为适用场景
findOne()找到第一个匹配的控件,没找到会阻塞等待(默认超时 10 秒)确定控件一定会出现
findOne(5000)同上,自定义超时 5 秒需要调整等待时间
findOnce()立即查找,没找到返回 null 不阻塞不确定是否出现,配合条件判断
find()查找所有匹配的控件需要遍历列表

控件操作方法

找到控件后可以调用这些方法:

方法效果
.click()点击控件(如果 clickable)
.longClick()长按
.setText("hello")输入文本(输入框)
.scrollForward() / .scrollBackward()列表滚动
.bounds()获取位置坐标 Rect
.text() / .desc()获取控件文本或描述

典型脚本示例

一个简单的自动点击脚本结构:

auto.waitFor();
// 打开目标 APP
app.launch("com.example.app");
// 等待控件出现并点击
const btn = text("开始").findOne();
btn.click();
// 然后继续下一步
sleep(1000);

何时不用控件选择器

有些界面没有可识别的控件(比如游戏画面),这时要用坐标操作。详见「坐标触摸与手势」。