@microi.net/cli 5.9.2 → 5.9.4

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 (171) 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/assets/build-meta.json +6 -6
  8. package/cordis.patch.yml +1 -1
  9. package/package.json +1 -1
  10. package/scripts/codex-marketplace.json +20 -20
  11. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  12. package/scripts/mcp-server.js +81 -81
  13. package/scripts/mcp-trae-windows-launcher.cmd +21 -21
  14. package/scripts/microi-cli-mcp.js +7 -7
  15. package/scripts/microi-codex-broker.js +21 -5
  16. package/scripts/microi-codex-router.js +17 -1
  17. package/scripts/microi-skills.meta.json +354 -348
  18. package/skills/.microi-skills-version.json +2 -2
  19. package/skills/.progressive-disclosure-manifest.json +122 -115
  20. package/skills/README.md +287 -287
  21. package/skills/ai-engine/SKILL.md +269 -269
  22. package/skills/ai-engine/references/ai-employees.md +48 -48
  23. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  24. package/skills/ai-platform-governance/SKILL.md +177 -177
  25. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  26. package/skills/app-store/SKILL.md +525 -525
  27. package/skills/business-blueprint/SKILL.md +193 -193
  28. package/skills/datasource-engine/SKILL.md +93 -93
  29. package/skills/dos-orm/SKILL.md +101 -95
  30. package/skills/dos-orm/references/api-reference.md +229 -229
  31. package/skills/email-engine/SKILL.md +81 -81
  32. package/skills/email-engine/references/v8-email.md +34 -34
  33. package/skills/job-engine/SKILL.md +176 -176
  34. package/skills/message-notification/SKILL.md +156 -156
  35. package/skills/message-notification/references/contracts.md +102 -102
  36. package/skills/microi/SKILL.md +14 -14
  37. package/skills/microi-ai-application/SKILL.md +115 -115
  38. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  39. package/skills/microi-client-frontend/SKILL.md +242 -242
  40. 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
  41. 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
  42. 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
  43. package/skills/microi-codex-installer/SKILL.md +231 -231
  44. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  45. package/skills/microi-db-schema/SKILL.md +175 -175
  46. package/skills/microi-db-schema/references/core-tables.md +695 -695
  47. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  48. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  49. package/skills/microi-db-schema/references/schema.md +646 -646
  50. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  51. package/skills/microi-deployment/SKILL.md +239 -220
  52. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  53. package/skills/microi-docs-coverage/SKILL.md +133 -133
  54. package/skills/microi-docs-coverage/references/capability-map.md +90 -90
  55. package/skills/microi-form-engine/SKILL.md +338 -333
  56. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  57. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  58. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  59. 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
  60. package/skills/microi-left-right-layout/SKILL.md +141 -141
  61. package/skills/microi-microservice/SKILL.md +332 -328
  62. package/skills/microi-microservice/references/runtime-delivery.md +282 -278
  63. package/skills/microi-mobile-app-quality/SKILL.md +203 -203
  64. 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 +227 -227
  65. 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 +129 -129
  66. package/skills/microi-solution-quotation/SKILL.md +78 -78
  67. package/skills/microi-sso/SKILL.md +95 -91
  68. package/skills/microi-sso/references/acceptance.md +51 -49
  69. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  70. package/skills/microi-sso/references/inbound.md +53 -53
  71. package/skills/microi-sso/references/outbound.md +43 -39
  72. package/skills/microi-ui/SKILL.md +192 -192
  73. 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
  74. package/skills/microi-uniapp-frontend/SKILL.md +206 -204
  75. 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 +261 -261
  76. 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
  77. package/skills/module-engine/SKILL.md +255 -255
  78. package/skills/module-engine/references/module-config.md +204 -204
  79. package/skills/ocr-engine/SKILL.md +113 -113
  80. package/skills/page-engine/SKILL.md +206 -206
  81. 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
  82. 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
  83. package/skills/performance-testing/SKILL.md +227 -221
  84. package/skills/playwright-e2e/SKILL.md +197 -196
  85. 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
  86. 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
  87. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  88. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  89. package/skills/print-engine/SKILL.md +259 -259
  90. package/skills/production-readonly-audit/SKILL.md +41 -41
  91. package/skills/report-engine/SKILL.md +71 -71
  92. package/skills/search-engine/SKILL.md +75 -75
  93. package/skills/spider-engine/SKILL.md +190 -190
  94. package/skills/system-observability/SKILL.md +259 -246
  95. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  96. package/skills/translate-engine/SKILL.md +140 -140
  97. package/skills/ui-design/SKILL.md +223 -223
  98. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  99. package/skills/ui-design/references/design-pattern-library.md +184 -184
  100. package/skills/ui-design/references/mci-design-contract.md +163 -163
  101. package/skills/ui-design/references/motion-and-media.md +78 -78
  102. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  103. 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
  104. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  105. 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
  106. 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
  107. 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
  108. 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
  109. 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
  110. 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
  111. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  112. package/skills/unity-integration/SKILL.md +178 -171
  113. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  114. package/skills/unity-integration/references/sdk-api.md +82 -82
  115. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  116. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  117. package/skills/v8-api-config/SKILL.md +388 -388
  118. package/skills/v8-cache-pattern/SKILL.md +312 -312
  119. package/skills/v8-crud-api/SKILL.md +179 -178
  120. 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
  121. 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
  122. package/skills/v8-debugging/SKILL.md +284 -284
  123. package/skills/v8-explorer-tree/SKILL.md +228 -228
  124. package/skills/v8-export-import/SKILL.md +219 -219
  125. 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
  126. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  127. 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
  128. package/skills/v8-file-upload/SKILL.md +255 -284
  129. package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -0
  130. 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
  131. 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
  132. package/skills/v8-file-upload/references/progressive-03-/347/251/272/347/233/256/345/275/225/346/240/207/350/256/260/344/270/216/350/277/234/347/250/213/344/270/213/350/275/275.md +36 -0
  133. package/skills/v8-formengine-http/SKILL.md +238 -238
  134. package/skills/v8-frontend-events/SKILL.md +180 -180
  135. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  136. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  137. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  138. package/skills/v8-http-integration/SKILL.md +182 -182
  139. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  140. 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
  141. package/skills/v8-image-processing/SKILL.md +190 -190
  142. package/skills/v8-image-processing/references/api-reference.md +623 -623
  143. package/skills/v8-menu-buttons/SKILL.md +186 -186
  144. 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
  145. 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
  146. 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
  147. package/skills/v8-mongodb/SKILL.md +200 -200
  148. package/skills/v8-mq-mqtt/SKILL.md +178 -176
  149. package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -342
  150. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  151. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  152. package/skills/v8-security/SKILL.md +227 -210
  153. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  154. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  155. package/skills/v8-sql-query/SKILL.md +302 -302
  156. package/skills/v8-table-event/SKILL.md +176 -176
  157. 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
  158. 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
  159. package/skills/v8-tcp-integration/SKILL.md +158 -147
  160. package/skills/v8-template-engine/SKILL.md +167 -167
  161. package/skills/v8-utilities/SKILL.md +104 -104
  162. package/skills/v8-utilities/references/client-api-index.md +143 -143
  163. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  164. package/skills/v8-utilities/references/server-api-index.md +188 -188
  165. package/skills/v8-workflow/SKILL.md +252 -252
  166. 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
  167. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  168. package/skills/vision-engine/SKILL.md +160 -160
  169. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  170. package/skills/workspace-conventions/SKILL.md +13 -13
  171. 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 +2 -2
@@ -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 -->