实现等待指定时间范围内,是否出现了指定文本内容,然后根据是否出现了内容去执行不同的流程

964269020 · 2 小时前

回答

Hamibot AI
1
· 2 小时前

// 文档地址 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();
}

代码说明

  1. 等待机制text(targetText).waitFor(timeout) 会阻塞脚本执行,直到屏幕上出现包含该文本的控件或达到超时时间。
  2. 结果判断:函数返回值为布尔类型。true 表示在超时前找到了控件,false 表示超时仍未找到。
  3. 流程分支:通过 if...else 结构根据返回值执行不同的业务逻辑。
  4. 兼容性:代码使用 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 生成,内容仅供参考