@microi.net/cli 5.8.4 → 5.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.mcp.json +1 -1
  5. package/.workbuddy-plugin/marketplace.json +2 -2
  6. package/.workbuddy-plugin/plugin.json +1 -1
  7. package/LICENSE +21 -21
  8. package/README.md +71 -71
  9. package/assets/build-meta.json +7 -7
  10. package/assets/feature-matrix.json +138 -138
  11. package/assets/logo.svg +4 -4
  12. package/cordis.patch.yml +1 -1
  13. package/package.json +1 -1
  14. package/scripts/codex-marketplace.json +20 -20
  15. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  16. package/scripts/mcp-server.js +5 -0
  17. package/scripts/mcp-trae-windows-launcher.cmd +21 -21
  18. package/scripts/microi-cli-mcp.js +7 -7
  19. package/scripts/microi-cli.js +67 -66
  20. package/scripts/microi-codex-broker.js +450 -450
  21. package/scripts/microi-codex-router.js +618 -582
  22. package/scripts/microi-skills.meta.json +384 -384
  23. package/skills/.microi-skills-version.json +2 -2
  24. package/skills/.progressive-disclosure-manifest.json +3566 -3566
  25. package/skills/README.md +287 -287
  26. package/skills/ai-engine/SKILL.md +269 -265
  27. package/skills/ai-engine/agents/openai.yaml +4 -4
  28. package/skills/ai-engine/references/ai-employees.md +48 -48
  29. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  30. package/skills/ai-platform-governance/SKILL.md +177 -177
  31. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  32. package/skills/app-store/SKILL.md +525 -525
  33. package/skills/app-store/agents/openai.yaml +4 -4
  34. package/skills/business-blueprint/SKILL.md +193 -193
  35. package/skills/datasource-engine/SKILL.md +93 -93
  36. package/skills/datasource-engine/agents/openai.yaml +4 -4
  37. package/skills/dos-orm/SKILL.md +97 -97
  38. package/skills/dos-orm/references/api-reference.md +229 -229
  39. package/skills/email-engine/SKILL.md +81 -81
  40. package/skills/email-engine/references/v8-email.md +34 -34
  41. package/skills/job-engine/SKILL.md +176 -176
  42. package/skills/job-engine/agents/openai.yaml +4 -4
  43. package/skills/message-notification/SKILL.md +156 -156
  44. package/skills/message-notification/agents/openai.yaml +5 -5
  45. package/skills/message-notification/references/contracts.md +102 -102
  46. package/skills/microi/SKILL.md +14 -14
  47. package/skills/microi-ai-app-auth.js +652 -652
  48. package/skills/microi-ai-application/SKILL.md +115 -115
  49. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  50. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  51. package/skills/microi-client-frontend/SKILL.md +244 -244
  52. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +144 -144
  53. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +196 -196
  54. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +167 -167
  55. package/skills/microi-codex/SKILL.md +102 -100
  56. package/skills/microi-codex-installer/SKILL.md +231 -227
  57. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  58. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  59. package/skills/microi-db-schema/SKILL.md +175 -175
  60. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  61. package/skills/microi-db-schema/references/core-tables.md +695 -695
  62. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  63. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  64. package/skills/microi-db-schema/references/schema.md +646 -646
  65. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  66. package/skills/microi-deployment/SKILL.md +221 -221
  67. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  68. package/skills/microi-docs-coverage/SKILL.md +133 -133
  69. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  70. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  71. package/skills/microi-form-engine/SKILL.md +333 -333
  72. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  73. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  74. package/skills/microi-form-layout/SKILL.md +205 -205
  75. package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
  76. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  77. package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +176 -176
  78. package/skills/microi-left-right-layout/SKILL.md +141 -141
  79. package/skills/microi-microservice/SKILL.md +326 -324
  80. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  81. package/skills/microi-mobile-app-quality/SKILL.md +185 -185
  82. package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +213 -213
  83. package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +128 -128
  84. package/skills/microi-solution-quotation/SKILL.md +78 -78
  85. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  86. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  87. package/skills/microi-sso/SKILL.md +92 -92
  88. package/skills/microi-sso/references/acceptance.md +49 -49
  89. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  90. package/skills/microi-sso/references/inbound.md +53 -53
  91. package/skills/microi-sso/references/outbound.md +39 -39
  92. package/skills/microi-system-delivery/SKILL.md +137 -137
  93. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
  94. package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +217 -217
  95. package/skills/microi-ui/SKILL.md +192 -192
  96. package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
  97. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  98. package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +225 -225
  99. package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -154
  100. package/skills/microi.v8.js +1921 -1921
  101. package/skills/module-engine/SKILL.md +255 -255
  102. package/skills/module-engine/references/module-config.md +204 -204
  103. package/skills/ocr-engine/SKILL.md +113 -113
  104. package/skills/ocr-engine/agents/openai.yaml +4 -4
  105. package/skills/page-engine/SKILL.md +206 -206
  106. package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
  107. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +234 -234
  108. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +60 -60
  109. package/skills/performance-testing/SKILL.md +221 -221
  110. package/skills/playwright-e2e/SKILL.md +196 -196
  111. package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -173
  112. package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -183
  113. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  114. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  115. package/skills/print-engine/SKILL.md +259 -259
  116. package/skills/production-readonly-audit/SKILL.md +41 -41
  117. package/skills/report-engine/SKILL.md +71 -71
  118. package/skills/report-engine/agents/openai.yaml +4 -4
  119. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  120. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  121. package/skills/scripts/sync-embedded-skills.mjs +46 -46
  122. package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
  123. package/skills/search-engine/SKILL.md +75 -75
  124. package/skills/search-engine/agents/openai.yaml +4 -4
  125. package/skills/spider-engine/SKILL.md +190 -190
  126. package/skills/system-observability/SKILL.md +248 -248
  127. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  128. package/skills/translate-engine/SKILL.md +140 -140
  129. package/skills/translate-engine/agents/openai.yaml +4 -4
  130. package/skills/ui-design/SKILL.md +223 -223
  131. package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
  132. package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
  133. package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
  134. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  135. package/skills/ui-design/references/design-pattern-library.md +184 -184
  136. package/skills/ui-design/references/mci-design-contract.md +163 -163
  137. package/skills/ui-design/references/motion-and-media.md +78 -78
  138. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  139. package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
  140. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  141. package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
  142. package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
  143. package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
  144. package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
  145. package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
  146. package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -142
  147. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  148. package/skills/unity-integration/SKILL.md +171 -171
  149. package/skills/unity-integration/agents/openai.yaml +4 -4
  150. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  151. package/skills/unity-integration/references/sdk-api.md +82 -82
  152. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  153. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  154. package/skills/v8-api-config/SKILL.md +388 -388
  155. package/skills/v8-cache-pattern/SKILL.md +312 -312
  156. package/skills/v8-crud-api/SKILL.md +178 -178
  157. package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -226
  158. package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
  159. package/skills/v8-debugging/SKILL.md +284 -284
  160. package/skills/v8-explorer-tree/SKILL.md +228 -228
  161. package/skills/v8-export-import/SKILL.md +219 -219
  162. package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -211
  163. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  164. package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -42
  165. package/skills/v8-file-upload/SKILL.md +284 -284
  166. package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +263 -263
  167. package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +161 -161
  168. package/skills/v8-formengine-http/SKILL.md +238 -238
  169. package/skills/v8-frontend-events/SKILL.md +180 -180
  170. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  171. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  172. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  173. package/skills/v8-http-integration/SKILL.md +182 -182
  174. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  175. package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -44
  176. package/skills/v8-image-processing/SKILL.md +190 -190
  177. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  178. package/skills/v8-image-processing/references/api-reference.md +623 -623
  179. package/skills/v8-menu-buttons/SKILL.md +186 -186
  180. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
  181. package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
  182. package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -104
  183. package/skills/v8-mongodb/SKILL.md +200 -200
  184. package/skills/v8-mq-mqtt/SKILL.md +176 -176
  185. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  186. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  187. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  188. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  189. package/skills/v8-security/SKILL.md +210 -210
  190. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  191. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  192. package/skills/v8-sql-query/SKILL.md +302 -302
  193. package/skills/v8-table-event/SKILL.md +176 -176
  194. package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -216
  195. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -46
  196. package/skills/v8-tcp-integration/SKILL.md +147 -147
  197. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  198. package/skills/v8-template-engine/SKILL.md +167 -167
  199. package/skills/v8-utilities/SKILL.md +104 -104
  200. package/skills/v8-utilities/references/client-api-index.md +143 -143
  201. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  202. package/skills/v8-utilities/references/server-api-index.md +188 -188
  203. package/skills/v8-workflow/SKILL.md +252 -252
  204. package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
  205. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  206. package/skills/vision-engine/SKILL.md +160 -160
  207. package/skills/vision-engine/agents/openai.yaml +4 -4
  208. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  209. package/skills/workspace-conventions/SKILL.md +273 -270
  210. package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +209 -209
  211. package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +217 -217
  212. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +27 -27
@@ -1,173 +1,173 @@
1
- # playwright-e2e 详细参考 1
2
-
3
- > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
-
5
- <!-- microi-progressive:chunk id=playwright-e2e-008 sha256=1ac51fe5663202a639d1983dcd882e4559201b68c90b5b81a17231ed04e24182 -->
6
- ## 全自动登录(免验证码,但不免密码)——必读
7
-
8
- E2E 自动化最容易卡在「登录页有图形验证码」。Microi 后端允许自动化跳过验证码,但账号和密码必须始终走真实校验;如果密码配置错了,登录接口必须返回账号或密码错误。源码见 `Microi.Server/Microi.net.Api/Controllers/SysUserController.cs`(`Login` 方法开头)。
9
-
10
- ### 方式 A:自动化登录参数(远端/本地通用)
11
-
12
- - 触发条件:请求体传 `_AutomationTestLogin=true` 或 `_SkipCaptchaForAutomation=true`,且当前租户 `sys_config.AutoTestSkipCaptcha=true`(中文 Label:允许自动化测试登录时绕开验证码;字段缺失时按默认开启兼容旧库)。
13
- - 效果:只跳过图形验证码,仍校验 `Account` / `Pwd`。
14
- - 适用:MCP 连接远端租户、CI、Playwright 截图验收、接口自动化登录。
15
- - 风险控制:如果远端环境不希望自动化免验证码,请在系统设置关闭【允许自动化测试登录时绕开验证码】。
16
-
17
- Playwright 登录助手(直接拿 Token,不走登录页):
18
-
19
- ```js
20
- // helpers/microi-login.js
21
- export async function automationLogin(page, {
22
- backend = process.env.BACKEND || 'https://localhost:61501',
23
- osClient = process.env.MICROI_OSCLIENT || 'iTdos',
24
- account = process.env.PW_TEST_ACCOUNT || 'admin',
25
- password = process.env.PW_TEST_PASSWORD || '',
26
- frontend = process.env.FRONTEND || 'http://localhost:61500',
27
- } = {}) {
28
- const resp = await page.request.post(`${backend}/api/SysUser/Login`, {
29
- headers: { OsClient: osClient },
30
- data: { Account: account, Pwd: password, OsClient: osClient, _AutomationTestLogin: true },
31
- ignoreHTTPSErrors: true,
32
- });
33
- const json = await resp.json();
34
- if (json.Code !== 1) throw new Error('automationLogin failed: ' + JSON.stringify(json).slice(0, 300));
35
- const token = json.Data?.Token || json.Token;
36
- const userId = json.Data?.Id || json.Id;
37
- await page.goto(frontend, { waitUntil: 'domcontentloaded' });
38
- await page.evaluate(({ t, u, oc, account }) => {
39
- localStorage.setItem('Token', t);
40
- localStorage.setItem('CurrentUser', JSON.stringify({ Id: u, Account: account }));
41
- localStorage.setItem('OsClient', oc);
42
- }, { t: token, u: userId, oc: osClient, account });
43
- return { token, userId };
44
- }
45
- ```
46
-
47
- ### 选型口诀
48
-
49
- - 容器、CI、本机接口自动化都使用 **`_AutomationTestLogin=true` + 真实密码**,直接 request 拿 Token。
50
- - 需要验证真实 UI 登录时,用同一真实账号密码填写页面;目标租户仍由 `sys_config.AutoTestSkipCaptcha` 决定是否允许自动化跳过验证码。
51
- - 失败时再退回 UI 兜底并保留原始错误;禁止新增 `DevLoginBypass`、Dev Key 或 `_DEV_BYPASS_`。
52
- - Token 可能在响应体 `Data.Token`,也可能在响应头 `Authorization`,两处都要兜底取。
53
- - 不要把 Token 明文写进最终报告/附件。
54
-
55
- ### ⚠️ 关键实测结论(Microi.Client SPA 守卫)
56
-
57
- > 实测:**仅把 Token 写进 localStorage 并不能通过前端路由守卫**——页面会反复跳回 `/login`,且动态菜单路由(如 `/order`)在登录态建立前会报 `No match found`。Dev Key 头旁路(方式 A)只对 `page.request` 直连接口有效(见 `blueprint-e2e.spec.mjs`),SPA 仍需要一次真实 UI 登录会话。
58
- >
59
- > 在浏览器内做 E2E(点页面、拖拽、截图)时最稳的登录顺序:
60
- > 1. 跳到 `#/login`;
61
- > 2. 填从受保护测试进程变量或用户本轮提供的真实账号密码;
62
- > 3. 目标租户开启 `AutoTestSkipCaptcha` 时传自动化标记跳过验证码,否则按真实页面流程填写验证码;
63
- > 4. 点「登 录」,落到首页;
64
- > 5. 再 `location.hash = '#/<目标路由>'` 进入目标页。
65
- >
66
- > 直连接口验收(不进页面)使用自动化标记拿 Token;历史 `_DEV_BYPASS_`、Dev Key 和 `DevLoginBypass` 均不得继续使用。
67
-
68
- <!-- /microi-progressive:chunk -->
69
- <!-- microi-progressive:chunk id=playwright-e2e-009 sha256=1466c4443d44a2957877971ecef64e228732af26a9030d02543f4a82c01e24ca -->
70
- ## 表单引擎卡死/递归更新全自动化诊断
71
-
72
- 当用户反馈“新增抽屉卡死”“设计页卡死”“点击控件无响应”“Maximum recursive updates exceeded”等表单引擎问题时,优先做可复现的 Playwright 诊断,而不是只靠猜测改代码。
73
-
74
- Microi.Client 已提供专用入口:
75
-
76
- ```powershell
77
- Push-Location Microi.Client
78
- npm run test:form-freeze:auto
79
- Pop-Location
80
- ```
81
-
82
- 该入口会执行 `scripts/run-form-engine-freeze-trace.mjs`,完整流程如下:
83
-
84
- 1. 自动配置 `Microi.Server/Microi.net.Api/Properties/launchSettings.json` 中指定 profile 的 `ASPNETCORE_ENVIRONMENT` 和 `DOTNET_ENVIRONMENT`。
85
- 2. 从 `PW_TEST_ACCOUNT` / `PW_TEST_PASSWORD` 读取真实测试凭据;脚本不得修改后端 `appsettings.*.json`。
86
- 3. 本地后端未启动时,自动进入 `Microi.Server/Microi.net.Api` 后执行 `dotnet run --launch-profile Microi.net.Api`。
87
- 4. 启动 Playwright,打开指定前端页面,开启 `MicroiFormTrace`,采集 `window.__MICROI_FORM_TRACE__`、console、pageerror、当前 URL 和 Playwright trace。
88
- 5. 页面卡住或断言失败时,先看最后一批 `[MicroiFormTrace #n]`,定位是停在 `runtime:*`、`diy-select:*`、`inform-v8-*`、`field-v8-*` 还是业务 console。
89
-
90
- 常用环境变量:
91
-
92
- ```powershell
93
- $env:FRONTEND='http://localhost:61500'
94
- $env:BACKEND='https://localhost:61501'
95
- $env:PW_BACKEND_ENV='iTdos'
96
- $env:PW_ASPNETCORE_ENVIRONMENT='iTdos'
97
- $env:PW_DOTNET_ENVIRONMENT='iTdos'
98
- $env:PW_APPSETTINGS_ENV='iTdos'
99
- $env:MICROI_OSCLIENT='iTdos'
100
- $env:PW_TEST_ACCOUNT='<从本地配置读取或手工覆盖>'
101
- $env:PW_TEST_PASSWORD='<从本地配置读取或手工覆盖>'
102
- $env:MICROI_FREEZE_PATH='/#/diy/diy-design/<TableId>?PageType='
103
- npm run test:form-freeze:auto
104
- ```
105
-
106
- 可选开关:
107
-
108
- - `PW_START_BACKEND=0`:不自动启动后端,只跑测试。
109
- - `PW_CONFIG_BACKEND=0`:不修改 `launchSettings.json`。
110
- - `PW_BACKEND_PROFILE=Microi.net.Api`:指定 launch profile。
111
- - `PW_TEST_ACCOUNT`、`PW_TEST_PASSWORD`:仅注入当前自动化进程,必须使用真实账号密码且不得写回文件。
112
- - `PW_HEADED=0`:无头运行。
113
-
114
- 诊断代码要遵守这些规则:
115
-
116
- - 登录优先用真实后端 `/api/SysUser/Login`,token 可能在响应头 `Authorization`,不要只从 `Data.Token` 取。
117
- - 如果 direct-token 被前端守卫踢回登录页,必须保留 UI 登录兜底,模拟真实用户输入账号密码点击登录。
118
- - trace 只在 URL、localStorage 或 `window.__MICROI_FORM_TRACE_ENABLED__` 开启时输出,避免生产默认刷屏。
119
- - 卡死类问题要捕获 `pageerror`;Vue 的 `Maximum recursive updates exceeded` 通常直接暴露根因组件。
120
- - 不要把 token 打印到最终报告里;console 附件中如包含 token,只用于本地诊断,不要转述完整值。
121
- - 修复后必须重跑同一个诊断用例,确认最后 trace 不再无限重复,并且页面在 10-15 秒后仍可响应。
122
-
123
- <!-- /microi-progressive:chunk -->
124
- <!-- microi-progressive:chunk id=playwright-e2e-010 sha256=484eff47612bc41ec9abf825d776e49bd71335f5815b0d1ce8749d9c86ba07bf -->
125
- ## 移动端视觉与资源验收
126
-
127
- uni-app H5、移动商城、分享海报、首页改版这类任务不能只跑接口和 DOM 断言。每次涉及页面风格、图片、二维码、商品卡片、首页聚合时,Playwright 必须补齐以下检查:
128
-
129
- - 每个核心页面都保存全页截图到 `tests/e2e/screenshots/`,并用 `view_image` 人眼复核首页、登录页、分享海报、商品列表等关键截图。
130
- - 对关键文字选择器做对比度检查,至少覆盖品牌名、搜索占位、公告、快捷入口、促销卡、分类、商品标题、价格、资产金额。浅底弱灰、金色按钮白字、渐变上低透明文字都应判为失败。
131
- - 图片不能只断言 URL 不为空;必须验证图片真实加载,例如检查 `img.naturalWidth > 0`、uni-image 背景图、或 HTTP 200。坏图、404、空白图都算失败。
132
- - 平台应用图片、海报二维码、公告图、商品图必须来自平台 HDFS/API 或数据库字段。测试中应拦截并拒绝 `qrserver.com`、`create-qr-code`、`picsum.photos`、`placeholder.com`、`dummyimage.com` 等第三方图床/二维码服务。
133
- - 如果接口返回了不可用图片,优先修数据源、上传平台文件或修接口引擎,不要用第三方 fallback 把测试“跑绿”。
134
- - 对分享海报二维码,优先断言平台接口,如 `/api/Os/CreateQRCodeImage`,或平台接口引擎返回的 HDFS 图片路径。
135
-
136
- <!-- /microi-progressive:chunk -->
137
- <!-- microi-progressive:chunk id=playwright-e2e-011 sha256=1aadaaf4d0a757e7225a33ff2a9b6621ea6e6430fb7eb92cb96d40ffb87f66af -->
138
- ## 测试证据必须绑定需求编号
139
-
140
- 当用户一次提出多个问题时,Playwright 用例、截图文件名和最终测试报告必须能回到原始 `1、2、3...` 编号。
141
-
142
- - 每个问题至少要有一个验证入口:DOM 断言、接口回读、数据库回读、截图或人眼复核;不能只测“页面能打开”。
143
- - 截图命名建议包含问题编号和页面,例如 `issue-01-mine-message-recharge-row.png`、`issue-02-certify-approved-consistent.png`。
144
- - 最终报告必须列出:编号、测试命令、是否通过、截图路径、未覆盖原因。
145
- - 如果某项属于后台元数据或数据库配置,仍需通过接口/数据库回读给出证据;前端截图只能证明展示,不等价于后台配置已改。
146
-
147
- <!-- /microi-progressive:chunk -->
148
- <!-- microi-progressive:chunk id=playwright-e2e-012 sha256=c5c754c843a1adfc4911e3676b36b6d4fc91cd2c269ee2dc000e547ac19428c6 -->
149
- ## 移动端/H5 回归纪律
150
-
151
- 处理 uni-app H5 移动商城的交易、资产、登录、购物车、抢购、充值、分享或图片相关问题时,不能只改代码后让用户手工发现问题。完成实现后必须至少执行(以下变量按项目实际情况替换):
152
-
153
- ```powershell
154
- Set-Location '<uniapp-project-root>' # 替换为项目实际路径
155
- $env:PW_API_BASE='https://localhost:61501' # 替换为项目后端地址
156
- $env:PW_API_ENV='development'
157
- $env:PW_PORT='5192' # 替换为项目实际端口
158
- npm run build:h5:local
159
- npx playwright test --reporter=list
160
- ```
161
-
162
- 业务口径规则因项目而异,应在各项目自己的 `tests/e2e/` 目录中维护 spec 断言,不要写进通用 skill。
163
-
164
- 表单引擎冻结高频根因:
165
-
166
- - 在 computed/render/watch 路径里写回同一个响应式依赖,例如 `field.Data` watcher 里再次写 `field.Data`。
167
- - 程序性同步 `el-select` 值时触发 `change`,又执行 V8/FormSet,形成循环。
168
- - 折叠分组、字段 Tabs 等运行态字段属性反复写入 `_isShow`、`_collapseClass`、`_fieldTabsPanes`。
169
- - 前端 InFormV8 或字段 V8 中持续 `FormSet` 同一字段,且没有值相等保护。
170
-
171
- 当前 Microi.Client 的表单冻结诊断文件是 `tests/form-engine-freeze-trace.spec.mjs`。新增类似测试时,可以复制它的结构:`addInitScript` 注入 `ApiBase/OsClient/Trace`,登录后跳转目标 hash,等待设计/表单 DOM,延迟观察响应性,最后 attach trace 和 console。
172
-
173
- <!-- /microi-progressive:chunk -->
1
+ # playwright-e2e 详细参考 1
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=playwright-e2e-008 sha256=1ac51fe5663202a639d1983dcd882e4559201b68c90b5b81a17231ed04e24182 -->
6
+ ## 全自动登录(免验证码,但不免密码)——必读
7
+
8
+ E2E 自动化最容易卡在「登录页有图形验证码」。Microi 后端允许自动化跳过验证码,但账号和密码必须始终走真实校验;如果密码配置错了,登录接口必须返回账号或密码错误。源码见 `Microi.Server/Microi.net.Api/Controllers/SysUserController.cs`(`Login` 方法开头)。
9
+
10
+ ### 方式 A:自动化登录参数(远端/本地通用)
11
+
12
+ - 触发条件:请求体传 `_AutomationTestLogin=true` 或 `_SkipCaptchaForAutomation=true`,且当前租户 `sys_config.AutoTestSkipCaptcha=true`(中文 Label:允许自动化测试登录时绕开验证码;字段缺失时按默认开启兼容旧库)。
13
+ - 效果:只跳过图形验证码,仍校验 `Account` / `Pwd`。
14
+ - 适用:MCP 连接远端租户、CI、Playwright 截图验收、接口自动化登录。
15
+ - 风险控制:如果远端环境不希望自动化免验证码,请在系统设置关闭【允许自动化测试登录时绕开验证码】。
16
+
17
+ Playwright 登录助手(直接拿 Token,不走登录页):
18
+
19
+ ```js
20
+ // helpers/microi-login.js
21
+ export async function automationLogin(page, {
22
+ backend = process.env.BACKEND || 'https://localhost:61501',
23
+ osClient = process.env.MICROI_OSCLIENT || 'iTdos',
24
+ account = process.env.PW_TEST_ACCOUNT || 'admin',
25
+ password = process.env.PW_TEST_PASSWORD || '',
26
+ frontend = process.env.FRONTEND || 'http://localhost:61500',
27
+ } = {}) {
28
+ const resp = await page.request.post(`${backend}/api/SysUser/Login`, {
29
+ headers: { OsClient: osClient },
30
+ data: { Account: account, Pwd: password, OsClient: osClient, _AutomationTestLogin: true },
31
+ ignoreHTTPSErrors: true,
32
+ });
33
+ const json = await resp.json();
34
+ if (json.Code !== 1) throw new Error('automationLogin failed: ' + JSON.stringify(json).slice(0, 300));
35
+ const token = json.Data?.Token || json.Token;
36
+ const userId = json.Data?.Id || json.Id;
37
+ await page.goto(frontend, { waitUntil: 'domcontentloaded' });
38
+ await page.evaluate(({ t, u, oc, account }) => {
39
+ localStorage.setItem('Token', t);
40
+ localStorage.setItem('CurrentUser', JSON.stringify({ Id: u, Account: account }));
41
+ localStorage.setItem('OsClient', oc);
42
+ }, { t: token, u: userId, oc: osClient, account });
43
+ return { token, userId };
44
+ }
45
+ ```
46
+
47
+ ### 选型口诀
48
+
49
+ - 容器、CI、本机接口自动化都使用 **`_AutomationTestLogin=true` + 真实密码**,直接 request 拿 Token。
50
+ - 需要验证真实 UI 登录时,用同一真实账号密码填写页面;目标租户仍由 `sys_config.AutoTestSkipCaptcha` 决定是否允许自动化跳过验证码。
51
+ - 失败时再退回 UI 兜底并保留原始错误;禁止新增 `DevLoginBypass`、Dev Key 或 `_DEV_BYPASS_`。
52
+ - Token 可能在响应体 `Data.Token`,也可能在响应头 `Authorization`,两处都要兜底取。
53
+ - 不要把 Token 明文写进最终报告/附件。
54
+
55
+ ### ⚠️ 关键实测结论(Microi.Client SPA 守卫)
56
+
57
+ > 实测:**仅把 Token 写进 localStorage 并不能通过前端路由守卫**——页面会反复跳回 `/login`,且动态菜单路由(如 `/order`)在登录态建立前会报 `No match found`。Dev Key 头旁路(方式 A)只对 `page.request` 直连接口有效(见 `blueprint-e2e.spec.mjs`),SPA 仍需要一次真实 UI 登录会话。
58
+ >
59
+ > 在浏览器内做 E2E(点页面、拖拽、截图)时最稳的登录顺序:
60
+ > 1. 跳到 `#/login`;
61
+ > 2. 填从受保护测试进程变量或用户本轮提供的真实账号密码;
62
+ > 3. 目标租户开启 `AutoTestSkipCaptcha` 时传自动化标记跳过验证码,否则按真实页面流程填写验证码;
63
+ > 4. 点「登 录」,落到首页;
64
+ > 5. 再 `location.hash = '#/<目标路由>'` 进入目标页。
65
+ >
66
+ > 直连接口验收(不进页面)使用自动化标记拿 Token;历史 `_DEV_BYPASS_`、Dev Key 和 `DevLoginBypass` 均不得继续使用。
67
+
68
+ <!-- /microi-progressive:chunk -->
69
+ <!-- microi-progressive:chunk id=playwright-e2e-009 sha256=1466c4443d44a2957877971ecef64e228732af26a9030d02543f4a82c01e24ca -->
70
+ ## 表单引擎卡死/递归更新全自动化诊断
71
+
72
+ 当用户反馈“新增抽屉卡死”“设计页卡死”“点击控件无响应”“Maximum recursive updates exceeded”等表单引擎问题时,优先做可复现的 Playwright 诊断,而不是只靠猜测改代码。
73
+
74
+ Microi.Client 已提供专用入口:
75
+
76
+ ```powershell
77
+ Push-Location Microi.Client
78
+ npm run test:form-freeze:auto
79
+ Pop-Location
80
+ ```
81
+
82
+ 该入口会执行 `scripts/run-form-engine-freeze-trace.mjs`,完整流程如下:
83
+
84
+ 1. 自动配置 `Microi.Server/Microi.net.Api/Properties/launchSettings.json` 中指定 profile 的 `ASPNETCORE_ENVIRONMENT` 和 `DOTNET_ENVIRONMENT`。
85
+ 2. 从 `PW_TEST_ACCOUNT` / `PW_TEST_PASSWORD` 读取真实测试凭据;脚本不得修改后端 `appsettings.*.json`。
86
+ 3. 本地后端未启动时,自动进入 `Microi.Server/Microi.net.Api` 后执行 `dotnet run --launch-profile Microi.net.Api`。
87
+ 4. 启动 Playwright,打开指定前端页面,开启 `MicroiFormTrace`,采集 `window.__MICROI_FORM_TRACE__`、console、pageerror、当前 URL 和 Playwright trace。
88
+ 5. 页面卡住或断言失败时,先看最后一批 `[MicroiFormTrace #n]`,定位是停在 `runtime:*`、`diy-select:*`、`inform-v8-*`、`field-v8-*` 还是业务 console。
89
+
90
+ 常用环境变量:
91
+
92
+ ```powershell
93
+ $env:FRONTEND='http://localhost:61500'
94
+ $env:BACKEND='https://localhost:61501'
95
+ $env:PW_BACKEND_ENV='iTdos'
96
+ $env:PW_ASPNETCORE_ENVIRONMENT='iTdos'
97
+ $env:PW_DOTNET_ENVIRONMENT='iTdos'
98
+ $env:PW_APPSETTINGS_ENV='iTdos'
99
+ $env:MICROI_OSCLIENT='iTdos'
100
+ $env:PW_TEST_ACCOUNT='<从本地配置读取或手工覆盖>'
101
+ $env:PW_TEST_PASSWORD='<从本地配置读取或手工覆盖>'
102
+ $env:MICROI_FREEZE_PATH='/#/diy/diy-design/<TableId>?PageType='
103
+ npm run test:form-freeze:auto
104
+ ```
105
+
106
+ 可选开关:
107
+
108
+ - `PW_START_BACKEND=0`:不自动启动后端,只跑测试。
109
+ - `PW_CONFIG_BACKEND=0`:不修改 `launchSettings.json`。
110
+ - `PW_BACKEND_PROFILE=Microi.net.Api`:指定 launch profile。
111
+ - `PW_TEST_ACCOUNT`、`PW_TEST_PASSWORD`:仅注入当前自动化进程,必须使用真实账号密码且不得写回文件。
112
+ - `PW_HEADED=0`:无头运行。
113
+
114
+ 诊断代码要遵守这些规则:
115
+
116
+ - 登录优先用真实后端 `/api/SysUser/Login`,token 可能在响应头 `Authorization`,不要只从 `Data.Token` 取。
117
+ - 如果 direct-token 被前端守卫踢回登录页,必须保留 UI 登录兜底,模拟真实用户输入账号密码点击登录。
118
+ - trace 只在 URL、localStorage 或 `window.__MICROI_FORM_TRACE_ENABLED__` 开启时输出,避免生产默认刷屏。
119
+ - 卡死类问题要捕获 `pageerror`;Vue 的 `Maximum recursive updates exceeded` 通常直接暴露根因组件。
120
+ - 不要把 token 打印到最终报告里;console 附件中如包含 token,只用于本地诊断,不要转述完整值。
121
+ - 修复后必须重跑同一个诊断用例,确认最后 trace 不再无限重复,并且页面在 10-15 秒后仍可响应。
122
+
123
+ <!-- /microi-progressive:chunk -->
124
+ <!-- microi-progressive:chunk id=playwright-e2e-010 sha256=484eff47612bc41ec9abf825d776e49bd71335f5815b0d1ce8749d9c86ba07bf -->
125
+ ## 移动端视觉与资源验收
126
+
127
+ uni-app H5、移动商城、分享海报、首页改版这类任务不能只跑接口和 DOM 断言。每次涉及页面风格、图片、二维码、商品卡片、首页聚合时,Playwright 必须补齐以下检查:
128
+
129
+ - 每个核心页面都保存全页截图到 `tests/e2e/screenshots/`,并用 `view_image` 人眼复核首页、登录页、分享海报、商品列表等关键截图。
130
+ - 对关键文字选择器做对比度检查,至少覆盖品牌名、搜索占位、公告、快捷入口、促销卡、分类、商品标题、价格、资产金额。浅底弱灰、金色按钮白字、渐变上低透明文字都应判为失败。
131
+ - 图片不能只断言 URL 不为空;必须验证图片真实加载,例如检查 `img.naturalWidth > 0`、uni-image 背景图、或 HTTP 200。坏图、404、空白图都算失败。
132
+ - 平台应用图片、海报二维码、公告图、商品图必须来自平台 HDFS/API 或数据库字段。测试中应拦截并拒绝 `qrserver.com`、`create-qr-code`、`picsum.photos`、`placeholder.com`、`dummyimage.com` 等第三方图床/二维码服务。
133
+ - 如果接口返回了不可用图片,优先修数据源、上传平台文件或修接口引擎,不要用第三方 fallback 把测试“跑绿”。
134
+ - 对分享海报二维码,优先断言平台接口,如 `/api/Os/CreateQRCodeImage`,或平台接口引擎返回的 HDFS 图片路径。
135
+
136
+ <!-- /microi-progressive:chunk -->
137
+ <!-- microi-progressive:chunk id=playwright-e2e-011 sha256=1aadaaf4d0a757e7225a33ff2a9b6621ea6e6430fb7eb92cb96d40ffb87f66af -->
138
+ ## 测试证据必须绑定需求编号
139
+
140
+ 当用户一次提出多个问题时,Playwright 用例、截图文件名和最终测试报告必须能回到原始 `1、2、3...` 编号。
141
+
142
+ - 每个问题至少要有一个验证入口:DOM 断言、接口回读、数据库回读、截图或人眼复核;不能只测“页面能打开”。
143
+ - 截图命名建议包含问题编号和页面,例如 `issue-01-mine-message-recharge-row.png`、`issue-02-certify-approved-consistent.png`。
144
+ - 最终报告必须列出:编号、测试命令、是否通过、截图路径、未覆盖原因。
145
+ - 如果某项属于后台元数据或数据库配置,仍需通过接口/数据库回读给出证据;前端截图只能证明展示,不等价于后台配置已改。
146
+
147
+ <!-- /microi-progressive:chunk -->
148
+ <!-- microi-progressive:chunk id=playwright-e2e-012 sha256=c5c754c843a1adfc4911e3676b36b6d4fc91cd2c269ee2dc000e547ac19428c6 -->
149
+ ## 移动端/H5 回归纪律
150
+
151
+ 处理 uni-app H5 移动商城的交易、资产、登录、购物车、抢购、充值、分享或图片相关问题时,不能只改代码后让用户手工发现问题。完成实现后必须至少执行(以下变量按项目实际情况替换):
152
+
153
+ ```powershell
154
+ Set-Location '<uniapp-project-root>' # 替换为项目实际路径
155
+ $env:PW_API_BASE='https://localhost:61501' # 替换为项目后端地址
156
+ $env:PW_API_ENV='development'
157
+ $env:PW_PORT='5192' # 替换为项目实际端口
158
+ npm run build:h5:local
159
+ npx playwright test --reporter=list
160
+ ```
161
+
162
+ 业务口径规则因项目而异,应在各项目自己的 `tests/e2e/` 目录中维护 spec 断言,不要写进通用 skill。
163
+
164
+ 表单引擎冻结高频根因:
165
+
166
+ - 在 computed/render/watch 路径里写回同一个响应式依赖,例如 `field.Data` watcher 里再次写 `field.Data`。
167
+ - 程序性同步 `el-select` 值时触发 `change`,又执行 V8/FormSet,形成循环。
168
+ - 折叠分组、字段 Tabs 等运行态字段属性反复写入 `_isShow`、`_collapseClass`、`_fieldTabsPanes`。
169
+ - 前端 InFormV8 或字段 V8 中持续 `FormSet` 同一字段,且没有值相等保护。
170
+
171
+ 当前 Microi.Client 的表单冻结诊断文件是 `tests/form-engine-freeze-trace.spec.mjs`。新增类似测试时,可以复制它的结构:`addInitScript` 注入 `ApiBase/OsClient/Trace`,登录后跳转目标 hash,等待设计/表单 DOM,延迟观察响应性,最后 attach trace 和 console。
172
+
173
+ <!-- /microi-progressive:chunk -->