回答
可以。Hamibot 完全支持此类定时监控与自动化测试场景。它基于 Android 无障碍服务,能够模拟启动应用、点击操作、检测界面状态,并配合控制台的定时任务功能实现周期性执行。
实现逻辑
- 通过
app.startActivity或launch启动目标 App。 - 使用控件选择器(如
text()、id()、desc())等待关键元素加载。 - 根据元素是否存在或界面状态判断 App 是否正常打开。
- 记录日志、截图或触发告警,最后返回桌面释放资源。
- 在 Hamibot 控制台配置定时任务(支持 Cron 表达式或固定间隔),无需在脚本内写循环。
示例代码(Rhino 1.7.15 兼容)
// 文档地址 https://docs.hamibot.com/
var targetPackage = "com.example.targetapp"; // 替换为目标 App 包名
var checkText = "首页"; // 替换为 App 成功加载后的关键文本或控件标识
var timeout = 15000; // 最大等待时间(毫秒)
function runMonitor() {
try {
// 启动目标应用
launch(targetPackage);
// 等待关键元素出现
var isSuccess = waitForElement(checkText, timeout);
if (isSuccess) {
console.log("监控通过:App 正常加载");
// 可在此添加截图或上报逻辑
} else {
console.log("监控失败:App 未在指定时间内响应");
// 可在此添加告警逻辑
}
} catch (e) {
console.log("监控异常:" + e.message);
} finally {
// 任务结束返回桌面,避免影响后续调度
home();
sleep(1000);
}
}
function waitForElement(target, maxWait) {
var startTime = new Date().getTime();
while (new Date().getTime() - startTime < maxWait) {
if (text(target).exists() || id(target).exists() || desc(target).exists()) {
return true;
}
sleep(500);
}
return false;
}
runMonitor();
关键注意事项与最佳实践
- 权限前置:脚本运行前必须在手机设置中开启 Hamibot 的「无障碍服务」与「后台弹出界面」权限。权限未授予时,脚本会因无法操作界面而直接提示运行结束。
- 调度方式:定时逻辑应交由 Hamibot 控制台的「定时任务」模块管理,脚本保持单次执行结构。避免使用
while(true)或长驻循环,防止内存泄漏或设备卡顿。 - 稳定性优化:优先使用
id()或desc()定位控件,比text()更稳定且不易受多语言或版本更新影响;添加合理的超时机制;关键节点使用console.log记录状态便于排查。 - 资源管理:监控完成后务必调用
home()返回桌面;合理设置执行间隔(建议不低于 5 分钟),避免频繁唤醒屏幕影响设备续航。 - 告警集成:可通过 Hamibot 的 HTTP 请求模块或 Webhook 插件,将监控结果(成功/失败/异常)推送到你的企业微信、钉钉或自建告警系统。
如果你需要针对特定 App 的控件定位方案或告警对接代码,可以提供具体界面特征,我会为你补充适配逻辑。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实