From cc7ed1ae62c3e50b2888449caa910095cc3a510f Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 16 Sep 2026 08:57:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(e2e):=20=E5=AF=B9=E9=BD=90=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E6=AD=A5=E9=AA=A4=E7=BC=96=E5=8F=B7=EF=BC=88=E6=A0=87?= =?UTF-8?q?=E9=A2=98=3D3=E2=86=92=E4=B8=8B=E4=B8=80=E6=AD=A5=E2=86=924?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E7=94=9F=E6=88=90=E2=86=925=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E2=86=926=E5=B0=81=E9=9D=A2=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v3 修复(基于 v2 合入后 CI 结果反馈): - v2 错误假设「✨ 确认生成视频」按钮在标题页(step 3),但 GenerateStepActions 代码逻辑是: step 1~3 显示「下一步 →」,step 4 才显示「✨ 确认生成视频」, step 5 渲染中显示「⏳ 视频渲染中…」完成后显示「下一步:选择封面」,step 6 封面无主按钮 - STEPS 常量仍定义 5 步,但 Step4TitleSettings 注释和 handleConfirmGenerate setCurrentStep(4) 的逻辑显示: 标题页是 step 3,点「下一步」进入 step 4 才出现确认生成按钮,确认后 setCurrentStep(4) 与进度页逻辑冲突 (前端代码本身存在步骤编号 off-by-one,但测试需对齐真实可点击元素,不修改生产代码) - v3 在填完标题后先点「下一步 →」进入 step 4,再找「✨ 确认生成视频」按钮点击 - waitForResponse 超时保持 60s,进度页断言改为「视频渲染中」文案 - 「下一步:选择封面」按钮增加 expect(visible) 等待 --- apps/web/e2e/core-generation.spec.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/web/e2e/core-generation.spec.ts b/apps/web/e2e/core-generation.spec.ts index 48a198f40..6e1a99a05 100755 --- a/apps/web/e2e/core-generation.spec.ts +++ b/apps/web/e2e/core-generation.spec.ts @@ -207,7 +207,14 @@ test.describe("Core generation flow", () => { const titleText = `E2E Test ${suffix}` await titleInput.fill(titleText) - // Step 3(标题+实时预览):确认生成按钮已移到标题页,点击直接创建最终渲染任务 + // 步骤3(标题页)底部操作栏按钮是「下一步 →」,点击后进入步骤4 + // 步骤4底部才是「✨ 确认生成视频」按钮 + const nextBtn = page.locator(".xx-step-actions .xx-btn-primary").filter({ hasText: "下一步" }) + await expect(nextBtn).toBeVisible({ timeout: 15_000 }) + await nextBtn.click() + + // Step 4:「确认生成」页面——此处底部是「✨ 确认生成视频」按钮 + // 注意:Step4 主内容区是实时预览画布,没有 h3 「🎬 确认生成」标题,标题由顶部步骤条展示 // 等待前端实时预览就绪:未就绪时右侧 FrontendPreviewPlayer 显示「准备预览素材...」占位, // 就绪(previewReady:素材已解析 + 模板已选中)后占位消失;否则按钮会被校验拦截弹 warning await page @@ -215,8 +222,8 @@ test.describe("Core generation flow", () => { .waitFor({ state: "detached", timeout: 30_000 }) .catch(() => {}) - // 定位底部操作栏的「✨ 确认生成视频」按钮(带 emoji 前缀,Playwright hasText 是子串匹配,无需写全) - // 使用底部操作栏 xx-step-actions 作用域,避免命中标题页内的"换一个""生成标题"等其他 primary 按钮 + // 定位底部操作栏的「✨ 确认生成视频」按钮 + // 使用底部操作栏 xx-step-actions 作用域,避免命中其他 primary 按钮 const confirmBtn = page .locator(".xx-step-actions .xx-btn-primary") .filter({ hasText: "确认生成" }) @@ -253,14 +260,14 @@ test.describe("Core generation flow", () => { expect(genData.items.length).toBeGreaterThan(0) expect(genData.items[0].id).toBeTruthy() - // 单视频(N=1):点击「确认生成视频」后跳步骤 4「确认生成」进度页,展示进度卡 - // 注意:Step4 内容只有进度卡/错误卡,没有 h3「🎬 确认生成」标题;标题由 StepsBar 展示 + // 单视频(N=1):点击「确认生成视频」后跳步骤 5「确认生成」进度页,展示进度卡 + // 注意:进度页底部按钮变为 disabled 的「⏳ 视频渲染中…」 await expect(page.getByText("视频渲染中")).toBeVisible({ timeout: 30_000 }) // 等待渲染完成:进度卡变为「视频生成完成」(最长等待 3 分钟) await expect(page.getByText("视频生成完成")).toBeVisible({ timeout: 180_000 }) - // 全部完成后底部按钮变为「下一步:选择封面」,点击进入 Step 5 + // 全部完成后底部按钮变为「下一步:选择封面」,点击进入 Step 6(封面) const nextCoverBtn = page.getByRole("button", { name: /下一步:选择封面/ }) await expect(nextCoverBtn).toBeVisible({ timeout: 30_000 }) await nextCoverBtn.click() -- 2.54.0