@microi.net/cli 5.8.5 → 5.8.7
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.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/assets/build-meta.json +7 -7
- package/assets/feature-matrix.json +138 -138
- package/assets/logo.svg +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-codex-stdio-adapter.js +0 -0
- package/scripts/mcp-server.js +1 -1
- package/scripts/microi-cli.js +66 -65
- package/scripts/microi-codex-broker.js +450 -450
- package/scripts/microi-codex-router.js +618 -618
- package/scripts/microi-skills.meta.json +384 -384
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +21 -21
- package/skills/README.md +287 -287
- package/skills/ai-engine/SKILL.md +269 -265
- package/skills/ai-engine/agents/openai.yaml +4 -4
- package/skills/ai-engine/references/ai-employees.md +48 -48
- package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
- package/skills/ai-platform-governance/SKILL.md +177 -177
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
- package/skills/app-store/SKILL.md +525 -525
- package/skills/app-store/agents/openai.yaml +4 -4
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +93 -93
- package/skills/datasource-engine/agents/openai.yaml +4 -4
- package/skills/dos-orm/SKILL.md +97 -95
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +81 -81
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +176 -176
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +156 -156
- package/skills/message-notification/agents/openai.yaml +5 -5
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi/SKILL.md +14 -14
- package/skills/microi-ai-app-auth.js +652 -652
- package/skills/microi-ai-application/SKILL.md +115 -115
- package/skills/microi-ai-application/agents/openai.yaml +4 -4
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/SKILL.md +246 -244
- 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
- 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
- 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
- package/skills/microi-codex/SKILL.md +102 -100
- package/skills/microi-codex-installer/SKILL.md +231 -231
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +122 -122
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/agents/openai.yaml +4 -4
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/SKILL.md +222 -220
- package/skills/microi-deployment/references/deployment-matrix.md +109 -109
- package/skills/microi-docs-coverage/SKILL.md +133 -133
- package/skills/microi-docs-coverage/references/capability-map.md +91 -91
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +333 -333
- package/skills/microi-form-engine/references/component-catalog.md +218 -218
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-form-layout/SKILL.md +205 -205
- 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
- package/skills/microi-frontend-sdk/SKILL.md +194 -194
- 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
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +328 -326
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- package/skills/microi-mobile-app-quality/SKILL.md +185 -185
- 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
- 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
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
- package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
- package/skills/microi-sso/SKILL.md +96 -90
- package/skills/microi-sso/references/acceptance.md +49 -49
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +39 -39
- package/skills/microi-system-delivery/SKILL.md +137 -137
- 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
- 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
- package/skills/microi-ui/SKILL.md +192 -192
- 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
- package/skills/microi-uniapp-frontend/SKILL.md +193 -193
- 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
- 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
- package/skills/microi.v8.js +1921 -1921
- package/skills/module-engine/SKILL.md +255 -255
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- package/skills/ocr-engine/agents/openai.yaml +4 -4
- package/skills/page-engine/SKILL.md +206 -206
- package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
- 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
- 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
- package/skills/performance-testing/SKILL.md +221 -221
- package/skills/playwright-e2e/SKILL.md +196 -196
- 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
- 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
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/report-engine/agents/openai.yaml +4 -4
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/scripts/sync-embedded-skills.mjs +46 -46
- package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/search-engine/agents/openai.yaml +4 -4
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +249 -246
- package/skills/system-observability/references/memory-incident-triage.md +77 -77
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/translate-engine/agents/openai.yaml +4 -4
- package/skills/ui-design/SKILL.md +223 -223
- package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
- package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
- package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/motion-and-media.md +78 -78
- package/skills/ui-design/references/product-flow-recipes.md +94 -94
- 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
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
- 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
- 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
- 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
- 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
- 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
- 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
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +171 -171
- package/skills/unity-integration/agents/openai.yaml +4 -4
- package/skills/unity-integration/references/ai-app-delivery.md +119 -119
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-api-config/SKILL.md +388 -388
- package/skills/v8-cache-pattern/SKILL.md +312 -312
- package/skills/v8-crud-api/SKILL.md +178 -178
- 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
- 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
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-export-import/SKILL.md +219 -219
- 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
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
- 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
- package/skills/v8-file-upload/SKILL.md +284 -284
- 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
- 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
- package/skills/v8-formengine-http/SKILL.md +238 -238
- package/skills/v8-frontend-events/SKILL.md +180 -180
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
- package/skills/v8-http-integration/SKILL.md +182 -182
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
- 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
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/agents/openai.yaml +4 -4
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-menu-buttons/SKILL.md +186 -186
- 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
- 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
- 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
- package/skills/v8-mongodb/SKILL.md +200 -200
- package/skills/v8-mq-mqtt/SKILL.md +176 -176
- package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
- package/skills/v8-security/SKILL.md +210 -210
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-table-event/SKILL.md +176 -176
- 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
- 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
- package/skills/v8-tcp-integration/SKILL.md +147 -147
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/SKILL.md +104 -104
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-utilities/references/server-api-index.md +188 -188
- package/skills/v8-workflow/SKILL.md +252 -252
- 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
- package/skills/v8-workflow/references/workflow-configuration.md +49 -49
- package/skills/vision-engine/SKILL.md +160 -160
- package/skills/vision-engine/agents/openai.yaml +4 -4
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +273 -273
- 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
- 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
- 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 -->
|