回答
文档地址 https://docs.hamibot.com/
对于无法通过布局分析查看、text点击无效的控件,但你又不想使用OCR(因其速度较慢),可以尝试以下几种更高效且稳定的方法来定位和点击控件:
1. 使用 bounds 区域点击(适用于固定位置操作)
如果该控件在屏幕上的位置是固定的,可以通过其坐标范围直接点击。
// 点击指定区域,left, top, right, bottom 是控件在屏幕中的坐标
click(500, 800, 600, 850);
虽然 click(left, top, right, bottom) 不如选择器智能,但在设备分辨率固定或适配好后,这种方式执行效率极高,适合高频操作。
⚠️ 注意:必须确保坐标准确,并且界面已完全加载后再执行点击。
2. 使用 desc(内容描述)定位
有些控件没有文本(text),但有内容描述(desc),比如图标按钮通常带有 accessibility 描述。
// 尝试通过 desc 查找并点击
desc("搜索").findOne().click();
// 或模糊匹配
descMatches(".*(搜|查).*").findOne().click();
desc 定位速度快,不依赖 OCR,推荐优先尝试。
3. 使用 className + 其他属性组合定位
即使控件无 text 或 id,也可能有明确的类名,如 ImageView、Button 等,结合其他属性可精准定位。
// 示例:点击某个特定的 ImageView
className("ImageView").desc("").id("").indexInParent(2).clickable(true).findOne().click();
你可以通过“布局分析”工具查看该控件是否存在可用的组合特征(如 indexInParent、clickable、longClickable 等)。
4. 使用父容器或兄弟节点进行相对定位
当目标控件自身属性不足时,可通过其父控件或相邻控件间接定位。
// 找到一个有 text 的兄弟控件,然后向上找父布局,再找目标子控件
text("用户名").parent().child(1).click(); // 假设目标控件在其父布局的第二个位置
这种方法灵活性高,适用于动态界面中部分静态结构稳定的场景。
5. 使用 packageName 和 className 组合过滤
若界面上只有一个特定类型的控件,可通过包名+类名锁定。
// 例如只有一张可点击的图片来自微信
className("ImageView").packageName("com.tencent.mm").clickable().findOne().click();
推荐实践顺序:
- 先用 desc / descMatches 尝试。
- 再看能否用 className + clickable / index / parent 组合定位。
- 若位置固定,使用 click(x1, y1, x2, y2) 最快。
- 避免使用 OCR,以上方法均基于无障碍服务原生查询,响应更快。
只要控件本身支持点击(即系统能接收到 Accessibility 事件),上述方法均可实现高速点击。
ℹ️ 本回答由 AI 生成,内容仅供参考