回答
// 文档地址 https://docs.hamibot.com/
要实现等待指定时间范围内检测指定文本内容,并根据结果执行不同流程,可以使用选择器的 waitFor(timeout) 方法或结合 exists() 与 sleep() 循环判断。waitFor(timeout) 会在指定毫秒内等待控件出现,返回布尔值表示是否找到。
以下是实现该逻辑的标准代码示例,兼容 Rhino 1.7.15 引擎:
// 文档地址 https://docs.hamibot.com/
// 配置参数
var targetText = "指定文本内容";
var timeout = 10000; // 等待超时时间,单位毫秒(例如 10 秒)
// 等待指定文本出现,最多等待 timeout 毫秒
// 如果找到返回 true,否则返回 false
var found = text(targetText).waitFor(timeout);
if (found) {
// 分支 1:在时间范围内找到了文本
toastLog("找到文本,执行成功流程");
// 在此处编写找到文本后的操作,例如点击
// text(targetText).findOne().click();
} else {
// 分支 2:超时未找到文本
toastLog("未找到文本,执行备选流程");
// 在此处编写未找到文本后的操作,例如重启应用或结束脚本
// hamibot.exit();
}
代码说明
- 等待机制:
text(targetText).waitFor(timeout)会阻塞脚本执行,直到屏幕上出现包含该文本的控件或达到超时时间。 - 结果判断:函数返回值为布尔类型。
true表示在超时前找到了控件,false表示超时仍未找到。 - 流程分支:通过
if...else结构根据返回值执行不同的业务逻辑。 - 兼容性:代码使用
var声明变量,避免使用箭头函数和默认参数,确保在 Rhino 1.7.15 环境下稳定运行。
替代方案:轮询检测
如果需要更灵活的控制(例如等待期间执行其他操作),可以使用 exists() 配合循环实现:
// 文档地址 https://docs.hamibot.com/
var targetText = "指定文本内容";
var timeout = 10000;
var interval = 500; // 每次检测间隔
var found = false;
for (var i = 0; i < timeout / interval; i++) {
if (text(targetText).exists()) {
found = true;
break;
}
sleep(interval);
}
if (found) {
toastLog("找到文本");
// 执行成功流程
} else {
toastLog("未找到文本");
// 执行备选流程
}
最佳实践建议
- 超时设置:根据网络环境和应用加载速度合理设置
timeout,避免过短导致误判或过长影响效率。 - 控件稳定性:在使用
waitFor找到控件后,建议再次检查exists()确保控件仍然可用后再进行操作,防止界面瞬间变化导致报错。 - 日志记录:使用
toastLog()同时在控制台和屏幕显示状态,便于调试和监控脚本运行状态。
ℹ️ 本回答由 AI 生成,内容仅供参考