资讯动态

自动化脚本中如何启动app和停止app

发布时间:2026/8/22 23:29:27 来源:尧图企业网站定制
在移动端自动化测试与操作中启动和停止目标App是最基础也是最核心的两个环节。无论是批量执行任务、循环测试还是异常恢复处理都离不开对App生命周期的精准控制。本文详细讲解如何通过launchApp启动应用以及如何在Android系统权限限制下实现App的停止操作。一、启动ApplaunchApp 函数详解冰狐提供了launchApp全局函数用于启动应用程序其返回值与调用方式都有明确的规范。1. 基础语法与返回值var ret launchApp(packageName/appName, tag, options);该函数返回一个整数值1表示启动成功0表示该应用未安装-1表示启动失败2. 参数说明第一个参数必填packageName/appName可以是应用的包名如com.tencent.mm也可以是应用名称。第二个参数选填tagApp启动后首页中出现的某个控件的tag出现该tag即表示App启动成功默认为空。tag的详细说明可参考冰狐文档中关于控件识别的章节。第三个参数选填optionsJSON对象格式包含以下字段字段类型默认值说明flagstring参见 findView 的 flag 参数modestringaccessibility识别tag的方式可选 accessibility 或 ocrdebugbooleanfalse为true时打印OCR识别结果regionarray[0,0,1,1]搜索区域 [left, top, width, height]值在[0,1]之间表示比例大于1表示像素failedfunctionnull搜索控件失败后调用的函数用于处理弹窗等场景maxStepnumber30检测App是否启动时的重试步数refreshbooleantrue启动过程中是否刷新和重新启动App3. 实际使用示例基础用法——通过包名启动var ret launchApp(com.tencent.mm, txt:我); if (1 ret) { console.log(微信启动成功); } else if (0 ret) { console.log(微信未安装); } else { console.log(微信启动失败); }这个例子中com.tencent.mm是微信的包名txt:我是微信首页底部我标签的tag。当该控件出现时函数判定App已成功启动。使用OCR模式识别tagvar ret launchApp(com.example.app, text:首页, { mode: ocr, debug: true, maxStep: 20, region: [0, 0.5, 1, 0.5] });当无障碍方式无法准确识别控件时可以切换为OCR模式通过文字识别来判断App是否启动成功。region参数限定了搜索范围可以提高识别效率。处理启动过程中的弹窗var ret launchApp(com.example.app, txt:主页, { failed: function() { // 处理可能出现的权限弹窗、更新提示等 if (findView(txt:允许).length 0) { click(txt:允许); } if (findView(txt:以后再说).length 0) { click(txt:以后再说); } }, maxStep: 40 });failed回调函数在搜索tag失败时被调用非常适合处理App启动过程中可能弹出的各种干扰窗口。4. 特殊场景模拟点击桌面图标启动文档特别指出如果某些App限制了通过包名直接启动可以通过模拟点击桌面图标的方式来实现启动。冰狐官方给出了一个参考实现function startup() { home(); // 回到桌面 // 根据实际情况修改点击逻辑 click(txt:微信, {click: true}); // 判断是否启动成功 if (findView(txt:我, {maxStep: 10}).length 0) { console.log(启动成功); return true; } else { console.log(启动失败); return false; } }这种方式绕过了系统对直接启动的限制适用于那些无法通过包名正常启动的特殊应用。二、停止App权限限制下的多种实现策略与启动不同停止App在Android系统中面临严格的权限限制。冰狐文档明确指出由于android权限的限制一般无法直接停止其他正在运行的app除非root过的系统或者定制rom。因此我们需要采用模拟人工操作的方式来达成停止App的目的。1. 方法一通过最近任务界面清除这是最通用且无需root权限的方法核心思路是模拟用户手动清理后台应用的操作function clearApp() { home(); // 1. 回到桌面 recentApps(); // 2. 打开最近任务界面 // 3. 点击清除按钮需根据手机系统调整 click(id:com.huawei.android.launcher:id/clear_all_recents_image_button, { click: true, afterWait: 1000 }); // 4. 回到冰狐界面 refresh({packageName: com.libra.aznfz}); }注意事项不同手机系统的清除全部按钮的控件ID和位置各不相同上述示例中的IDcom.huawei.android.launcher:id/clear_all_recents_image_button适用于华为手机其他品牌需要根据实际情况修改。recentApps()函数用于打开最近任务界面是冰狐提供的全局API。文档特别提醒由于冰狐被系统锁定点击清除按钮后冰狐自身不会停止运行。refresh({packageName: com.libra.aznfz})用于回到冰狐的主界面。针对不同手机的适配思路function clearAppByRecent() { home(); recentApps(); // 等待最近任务界面加载 sleep(500); // 尝试多种可能的清除按钮 var clearSelectors [ id:com.huawei.android.launcher:id/clear_all_recents_image_button, id:com.android.systemui:id/clear_all_button, desc:清除全部, txt:清除 ]; for (var i 0; i clearSelectors.length; i) { if (findView(clearSelectors[i]).length 0) { click(clearSelectors[i]); break; } } refresh({packageName: com.libra.aznfz}); }2. 方法二通过应用信息界面停止冰狐文档还提供了另一种途径——打开应用信息界面然后停止App。这种方法同样不需要root权限通过系统设置中的应用管理来强制停止目标应用。function stopAppViaSettings(packageName) { // 打开应用信息界面 var intent new Intent(); intent.setAction(android.settings.APPLICATION_DETAILS_SETTINGS); intent.setData(package: packageName); startActivity(intent); // 等待界面加载 sleep(1000); // 点击强行停止按钮不同手机文字可能不同 if (findView(txt:强行停止).length 0) { click(txt:强行停止); // 确认停止 if (findView(txt:确定).length 0) { click(txt:确定); } } else if (findView(txt:强制停止).length 0) { click(txt:强制停止); if (findView(txt:确定).length 0) { click(txt:确定); } } // 返回冰狐 home(); refresh({packageName: com.libra.aznfz}); }这种方法相比最近任务清除更加彻底能够真正强制停止应用进程但操作步骤更多且不同厂商的设置界面差异较大。3. 方法三Root环境下的直接终止对于已经root的设备理论上可以通过执行shell命令来直接终止进程function stopAppRoot(packageName) { // 需要root权限 shell(am force-stop packageName, true); }但这种方法依赖root环境且冰狐官方文档并未将其作为推荐方案实际使用时需要谨慎评估兼容性。三、脚本自身的停止控制除了停止其他App冰狐还提供了控制脚本自身执行的APIstop()停止执行当前脚本可选的refresh参数控制停止后是否刷新界面默认为true。javascript// 满足某个条件时停止脚本 if (someCondition) { stop(); // 停止脚本执行 }pause()与resume()暂停和恢复脚本执行。pause()调用后会自动弹出暂停按钮手动点击后程序继续运行。javascript// 暂停脚本等待用户操作 pause(); // 在其他地方恢复执行 resume();四、总结与实践建议基于冰狐API进行App启动与停止操作需要把握以下几个要点启动优先使用launchApp这是冰狐官方提供的标准接口支持包名启动、tag验证、OCR识别、弹窗处理等完整功能链。对于特殊限制的应用可降级为模拟点击桌面图标的方式。停止需要因地制宜由于系统权限限制没有统一的停止API。推荐优先使用最近任务清除方案代码简洁且通用性较好需要彻底终止进程时可考虑应用信息界面停止方案。做好设备适配不同厂商华为、小米、OPPO、vivo等的系统UI差异较大无论是清除按钮的控件ID还是设置界面的文案都需要在实际设备上进行充分测试和适配。注意异常处理启动时可能遇到弹窗干扰停止时可能遇到按钮位置变化应在脚本中加入完善的错误处理和重试机制。掌握好启动与停止这两个基础操作才能构建出稳定可靠的自动化脚本体系。冰狐提供的API虽不完美尤其在停止方面受限于Android系统本身但通过合理的策略组合依然可以覆盖绝大多数自动化场景的需求。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价