回答
在Hamibot中获取控件及其属性主要依赖基于Android无障碍服务的UI选择器。以下是具体实现方法和关键技术说明:
1. 获取控件对象
你可以使用 text()、id()、desc()、className() 等选择器,配合 .findOne() 或 .findOnce() 获取控件实例。
// 文档地址 https://docs.hamibot.com/
let widget = text('目标文本').findOne();
if (widget) {
log('成功获取控件');
} else {
log('未找到对应控件');
}
2. 获取控件常用属性
获取到控件对象后,可直接调用内置方法读取文本、ID、边界坐标等信息:
// 文档地址 https://docs.hamibot.com/
let widget = text('目标文本').findOne();
if (widget) {
let txt = widget.text(); // 获取控件文本,无文本返回 ""
let idStr = widget.id(); // 获取控件ID,无ID返回 null
let bounds = widget.bounds(); // 获取控件边界 {left, top, right, bottom}
let descStr = widget.desc(); // 获取控件内容描述
log('文本: ' + txt);
log('边界坐标: ' + JSON.stringify(bounds));
}
3. 关于获取“文字颜色”的重要说明
Android无障碍服务底层API 不支持直接读取第三方应用控件的渲染文字颜色。Hamibot文档中提到的 textColor 属性仅用于编写Hamibot自定义UI布局时设置样式(例如 <text text="提示" textColor="red"/>),无法用于反向获取其他App界面上控件的实际显示颜色。
如果你必须判断文字颜色,通常需结合图像识别方案:
- 通过
widget.bounds()获取控件的屏幕坐标区域。 - 使用
images.captureScreen()截取当前屏幕。 - 在截图的对应坐标区域内采样像素颜色(如使用
images.pixel()或区域颜色匹配函数)。
该方案受设备分辨率、深色模式、字体抗锯齿等因素影响,稳定性有限。在自动化实践中,建议优先通过控件文本内容、ID、选中状态(checked()/selected())或可见性(visibleToUser())来驱动业务逻辑。
4. 注意事项
- Hamibot脚本运行在 Rhino 1.7.15 引擎上,编写时请避免使用箭头函数、默认参数、解构赋值等ES6+语法。
.findOne()会阻塞执行直到找到控件或超时,建议合理配置超时时间,或在非关键路径使用.findOnce()防止脚本卡死。- 控件属性读取需在控件已渲染且无障碍服务可访问的前提下进行,部分WebView或自定义绘制控件可能无法获取完整节点信息。
如果你需要针对特定App的控件定位策略或图像颜色采样示例,可以提供具体场景,我会为你提供更精准的脚本方案。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实