Skip to main content

playwright-dsl-to-spec

将符合 .codex/skills/testcase-to-playwright-dsl/references/dsl-schema.md 的 ui-test.dsl.yaml 转换为 Playwright spec.ts。适用于 Codex 读取交付目录中的 ui-dsl/ui-test.dsl.yaml 并生成 playwright/tests/*.spec.ts;严格按 DSL schema 解析字段,不新增 DSL 字段,不修改 testcase-to-playwright-dsl skill,不执行 Playwright,不运行 npx playwright test。

Zur Installation springen

Quellinformationen

Repository
Fhui/AI-TEST
Letzte Quellaktivität
6. Mai 2026 um 07:28
Erkannte Sprache von SKILL.md
Chinesisch
Sterne
1
Forks
0

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
3 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
playwright-dsl-to-spec
description
将符合 .codex/skills/testcase-to-playwright-dsl/references/dsl-schema.md 的 ui-test.dsl.yaml 转换为 Playwright spec.ts。适用于 Codex 读取交付目录中的 ui-dsl/ui-test.dsl.yaml 并生成 playwright/tests/*.spec.ts;严格按 DSL schema 解析字段,不新增 DSL 字段,不修改 testcase-to-playwright-dsl skill,不执行 Playwright,不运行 npx playwright test。
# Playwright DSL 转 Spec ## 目标 将交付目录中的 UI DSL 转换为 Playwright 测试代码: - 输入:`./<delivery-name>/ui-dsl/ui-test.dsl.yaml` - 输出:`./<delivery-name>/playwright/tests/*.spec.ts` - 唯一 DSL 规范来源:项目内 `.codex/skills/testcase-to-playwright-dsl/references/dsl-schema.md` - `ui-test.dsl.yaml` 只能作为输入或测试样例,不能作为 schema 来源。 - 本 skill 只生成 `.spec.ts`,不执行 Playwright,不运行 `npx playwright test`。 ## 执行流程 1. 确认项目根目录是包含 `.codex` 的目录。 2. 根据用户请求定位交付目录;如果未指定,查找项目根目录下的 `*/ui-dsl/ui-test.dsl.yaml`。 3. 如果找到多个 DSL 文件,立即停止执行,并要求用户指定 `delivery-name`。 4. 读取 `.codex/skills/testcase-to-playwright-dsl/references/dsl-schema.md`,确认当前 DSL schema 与任务一致。 5. 运行内置脚本生成 spec: ```bash python3 .codex/skills/playwright-dsl-to-spec/scripts/convert_dsl_to_spec.py \ --input ./<delivery-name>/ui-dsl/ui-test.dsl.yaml \ --output-dir ./<delivery-name>/playwright/tests ``` 如果未传入 `--input`,脚本会按 `*/ui-dsl/ui-test.dsl.yaml` 自动查找;找到多个时会失败并提示明确输入路径。 ## 生成规则 - 只支持 schema 中定义的 action:`goto`、`click`、`fill`、`select`、`upload`、`wait_for`、`assert_visible`、`assert_text`、`assert_state`。 - 严格校验顶层字段、`meta`、`selectors`、`test_data`、`flows`、`steps`、`todos`、`unsupported_steps` 的字段白名单;出现 schema 外字段时停止。 - `selector.status: "todo"` 的步骤不要生成真实 Playwright 操作,必须生成清晰的运行时失败或跳过,不能只生成 TODO 注释后静默通过。默认生成 `throw new Error(...)`。 - `selector.status: "confirmed"` 的步骤才生成真实 Playwright locator 操作。 - `goto` 仅在 `url` 非空时生成 `page.goto(url)`;否则生成 TODO 注释。 - `wait_for` 如果没有 target,则生成 `page.waitForTimeout(timeout_ms)`;如果有 target,遵循 selector status 规则。 - `fill`、`select`、`upload` 的 `value` 支持 `${data_key}` 引用顶层 `test_data`。 - `assert_visible` 使用 `toBeVisible`。 - `assert_text` 使用 `toContainText(expected)`;缺少 `expected` 时生成 TODO 注释。 - `assert_state` 使用 `toBeVisible` 作为保守状态断言,并保留 `expected` 为 TODO 注释,等待人工补充具体状态断言。 - confirmed selector 字符串要转换为对应 Playwright locator API:`role=...` 使用 `page.getByRole`,`label=` 使用 `page.getByLabel`,`placeholder=` 使用 `page.getByPlaceholder`,`text=` 使用 `page.getByText`,CSS selector 使用 `page.locator`。 - `optional: true` 的步骤包裹在 `try/catch` 中,失败时记录 warning,不中断测试。 - 每个 DSL step 前必须固定输出以下四行注释,供 `playwright-result-report` 从失败行号反查 DSL: ```ts // flow_id: <flow.id> // step_id: <step.id> // source_ts: <step.source_ts> // selector_key: <step.target> ``` ## 输出约定 - 每个 `flow` 生成一个 `<flow-id>.spec.ts`。 - 输出目录必须是 `./<delivery-name>/playwright/tests/`。 - 不要写入 `.codex/`、`.codex/skills/` 或其他执行产物目录。 - 完成后只简要说明生成的 spec 文件路径;不要在对话中粘贴完整 spec。
Auf GitHub ansehen