@@ -1025,26 +1025,91 @@ HTTP服务器已就绪(0.5秒)
10251025
10261026---
10271027
1028- ### 下一步目标(v10.4)
1028+ ## v10.5 — 小程序蓝本测试完整闭环(2026-03-08)
1029+
1030+ ### 成果
1031+ - ** 100%通过率** :70/70步骤,0 Bug,44.4秒完成
1032+ - ** 通用执行器** :13种步骤类型,不写死任何业务逻辑
1033+ - ** 完整12场景蓝本** :全部用通用步骤表达,编程AI可按此格式生成任意蓝本
1034+ - ** Bug发现→修复→验证闭环** :发现4Bug→修复2个小程序真实Bug+2个蓝本问题→重测100%
1035+
1036+ ### 关键技术发现和铁律
1037+
1038+ 1 . ** 小程序evaluate必须用` new Function ` 传函数** :
1039+ - ` mp.evaluate("字符串") ` → 报` Arg string terminates parameters early ` 或` Unexpected token `
1040+ - ` mp.evaluate(new Function("代码")) ` → 正确执行,等同于` mp.evaluate(() => { 代码 }) `
1041+ - 这是因为automator对字符串参数有严格的解析限制
1042+
1043+ 2 . ** 小程序没有` document ` 对象** :
1044+ - evaluate里不能用` document.querySelector ` ,只能用` getApp() ` 、` getCurrentPages() ` 、` wx.xxx `
1045+ - 查询DOM元素用automator的` page.$ ` 和` page.$$ ` (在Node端执行,不在小程序端)
1046+ - 新增` page_query ` 步骤类型解决此问题
1047+
1048+ 3 . ** ` callMethod('onShow') ` 会导致100秒超时** :
1049+ - reset_state里调callMethod会让后续截图卡死
1050+ - 解决:去掉callMethod,` reLaunch + sleep(2000) ` 已足够
1051+
1052+ 4 . ** 策略3必须强杀进程,不能依赖` cli quit ` ** :
1053+ - 模拟器状态烂了时,` cli quit ` 也会失败
1054+ - 改为` taskkill /F /IM wechatdevtools.exe /T ` 强杀所有进程
1055+ - 然后` cli open ` → ` cli auto ` 重建干净环境
1056+
1057+ 5 . ** 小程序代码修改后必须重新编译** :
1058+ - 外部编辑器改了js文件,开发者工具不会自动检测
1059+ - 需要在开发者工具里点"编译",或者执行器自动kill重启
1060+
1061+ ### 通用执行器步骤类型一览
1062+
1063+ | 步骤类型 | 用途 | 执行环境 |
1064+ | ---------| ------| ---------|
1065+ | ` navigate ` | reLaunch跳页面(清空栈) | 小程序端 |
1066+ | ` navigate_to ` | navigateTo跳页面(保留栈) | 小程序端 |
1067+ | ` click ` | 点击元素 | automator |
1068+ | ` tap_multiple ` | 连续点击N次 | automator |
1069+ | ` fill ` | 输入文本 | automator |
1070+ | ` screenshot ` | 截图 | automator |
1071+ | ` evaluate ` | 执行JS(new Function) | 小程序端 |
1072+ | ` call_method ` | 调用页面方法 | automator |
1073+ | ` page_query ` | 查元素(text/count/texts) | Node端 |
1074+ | ` read_text ` | 读取元素文本(带重试) | automator |
1075+ | ` assert_text ` | 文本包含断言 | automator |
1076+ | ` assert_compare ` | 数值比较断言 | automator |
1077+ | ` reset_state ` | 重置全局状态+回首页 | 小程序端 |
1078+ | ` wait ` | 等待 | Node端 |
1079+ | ` scroll ` | 滚动页面 | 小程序端 |
1080+
1081+ ### 修改文件
1082+ - ` src/controller/miniprogram_runner.js ` :13种步骤类型、new Function方案、策略3强杀进程
1083+ - ` src/api/routes.py ` :返回bugs和steps详情、crash保护友好提示
1084+ - ` src/testing/models.py ` :ActionType枚举新增7种类型
1085+ - ` extension/src/sidebarProvider.ts ` :步骤详情自动展开
1086+ - ` miniprogram-demo/testpilot/testpilot.json ` :v3.1完整12场景蓝本
1087+ - ` miniprogram-demo/pages/index/index.js ` :修复库存上限检查Bug
1088+ - ` miniprogram-demo/pages/checkout/checkout.js ` :修复同城配送费Bug
1089+
1090+ ### Git提交链
1091+ - 52c20cf:通用执行器+完整12场景蓝本
1092+ - 62d8289:修复evaluate用document问题+page_query+read_text重试
1093+ - 6b4651b:关键修复evaluate/navigate/reset_state全部改用new Function
1094+ - 3970581:修复小程序蓝本测试返回bugs和steps详情
1095+ - c64f8ed:修复2个小程序Bug(库存+配送费)+空购物车蓝本
1096+ - 92ecee3:执行器crash保护
1097+ - 444c59e:策略3改为强杀进程taskkill
1098+ - 3cc6952:步骤详情自动展开+逐步进度输出
10291099
1030- #### 优先级1:端到端验证
1031- 1 . ** 启动引擎 → 扫描蓝本 → 选Android项目 → 设备检测 → 完整流程打通**
1032- - 目前设备检测UI已做,但后端API(` listMobileDevices ` )需要引擎实际运行才能验证
1033- - 需要连接真机或启动模拟器测试
1100+ ---
10341101
1035- 2 . ** 小程序项目完整测试流程**
1036- - 选择FreshMart项目 → 平台前置检查(开发者工具状态) → 运行蓝本 → 查看结果
1037- - 验证` platformPrecheck ` 消息链路
1102+ ### 下一步目标(v10.6)
10381103
1039- 3 . ** Web项目完整测试流程**
1040- - 选择shop-demo项目 → 运行蓝本 → 查看Bug列表 → 确认结果正确
1104+ #### 优先级1:测试体验
1105+ 1 . ** 逐步进度日志** :routes.py改Popen流式读stderr,实时推送每步进度
1106+ 2 . ** 测试中状态提示** :前端显示"测试中..."动画,让用户知道系统在运行
10411107
1042- #### 优先级2:测试报告增强
1043- 4 . ** 报告底部附带经验总结+蓝本维护提醒 ** (已设计格式,待实现)
1044- 5 . ** 报告中的Bug列表与蓝本场景对应 **
1108+ #### 优先级2:端到端验证
1109+ 3 . ** Android项目完整测试流程 **
1110+ 4 . ** Web项目完整测试流程 ** (shop-demo)
10451111
1046- #### 优先级3:用户体验优化
1047- 6 . ** 状态文案标准化** :未连接/已连接/检测中/测试中
1048- 7 . ** 错误提示可执行化** :每个错误告诉用户下一步做什么
1049- 8 . ** 首次无蓝本时醒目提示** (已部分实现,需完善引导文案)
1112+ #### 优先级3:蓝本生成提示词
1113+ 5 . ** 编写提示词模板** :让编程AI能自动生成符合格式的testpilot.json蓝本
1114+ 6 . ** 蓝本格式文档** :步骤类型、字段说明、示例
10501115
0 commit comments