const { chromium } = require('playwright'); const path = require('path'); const fs = require('fs'); (async () => { const browser = await chromium.launch({ headless: false }); // 显示浏览器窗口 const context = await browser.newContext(); const page = await context.newPage(); console.log('=== 视频生成功能完整测试 ===\n'); try { // 1. 打开视频生成列表页面 console.log('1. 打开视频生成列表页面...'); await page.goto('http://localhost:5173/#/pages/video-generator/index', { waitUntil: 'networkidle', timeout: 30000 }); await page.waitForTimeout(3000); await page.screenshot({ path: 'step1-list-page.png', fullPage: true }); console.log(' ✅ 页面加载成功,已保存截图: step1-list-page.png'); // 检查控制台错误 const errors = []; page.on('console', msg => { if (msg.type() === 'error') { errors.push(msg.text()); } }); // 2. 点击创建新视频按钮 console.log('\n2. 点击创建新视频按钮...'); const createBtn = await page.locator('text=创建新视频').first(); if (await createBtn.isVisible()) { await createBtn.click(); await page.waitForTimeout(2000); await page.screenshot({ path: 'step2-create-page.png', fullPage: true }); console.log(' ✅ 进入创建页面,已保存截图: step2-create-page.png'); } else { console.log(' ⚠️ 未找到创建按钮'); } // 3. 输入标题 console.log('\n3. 输入视频标题...'); const titleInput = await page.locator('input[placeholder="给视频起个标题"]').first(); if (await titleInput.isVisible()) { await titleInput.fill('自动化测试视频'); console.log(' ✅ 标题输入成功'); } else { console.log(' ⚠️ 未找到标题输入框'); } // 4. 检查页面结构 console.log('\n4. 检查页面结构...'); const stepNav = await page.locator('.step-nav').isVisible(); const addImageBtn = await page.locator('text=添加图片').isVisible(); const addAudioBtn = await page.locator('text=添加音频').isVisible(); const nextBtn = await page.locator('text=下一步').isVisible(); console.log(' - 步骤导航:', stepNav ? '✅' : '❌'); console.log(' - 添加图片按钮:', addImageBtn ? '✅' : '❌'); console.log(' - 添加音频按钮:', addAudioBtn ? '✅' : '❌'); console.log(' - 下一步按钮:', nextBtn ? '✅' : '❌'); // 5. 点击下一步到第二步 console.log('\n5. 跳转到第二步...'); if (nextBtn) { await page.locator('text=下一步').click(); await page.waitForTimeout(1000); await page.screenshot({ path: 'step3-step2.png', fullPage: true }); console.log(' ✅ 已进入第二步,已保存截图: step3-step2.png'); } // 6. 点击下一步到第三步 console.log('\n6. 跳转到第三步(生成页面)...'); const nextBtn2 = await page.locator('text=下一步').isVisible(); if (nextBtn2) { await page.locator('text=下一步').click(); await page.waitForTimeout(1000); await page.screenshot({ path: 'step4-step3.png', fullPage: true }); console.log(' ✅ 已进入第三步,已保存截图: step4-step3.png'); } // 7. 检查生成按钮 console.log('\n7. 检查生成按钮...'); const generateBtn = await page.locator('text=开始生成视频').isVisible(); console.log(' - 生成按钮:', generateBtn ? '✅' : '❌'); // 8. 检查控制台错误 console.log('\n8. 检查控制台错误...'); if (errors.length > 0) { console.log(' ⚠️ 发现控制台错误:'); errors.forEach((err, i) => { console.log(` ${i + 1}. ${err}`); }); } else { console.log(' ✅ 无控制台错误'); } // 9. 测试API连接 console.log('\n9. 测试后端API...'); const apiTest = await page.evaluate(async () => { try { const res = await fetch('http://localhost:3000/api/video/projects'); const data = await res.json(); return { status: res.status, success: data.success, data: data.data }; } catch (e) { return { error: e.message }; } }); if (apiTest.error) { console.log(' ❌ API连接失败:', apiTest.error); } else { console.log(' ✅ API连接成功'); console.log(' - 状态码:', apiTest.status); console.log(' - 响应格式正确:', apiTest.success ? '✅' : '❌'); console.log(' - 项目数量:', apiTest.data?.items?.length || 0); } // 10. 总结 console.log('\n' + '='.repeat(50)); console.log('测试完成!'); console.log('='.repeat(50)); console.log('\n截图已保存:'); console.log('- step1-list-page.png - 列表页面'); console.log('- step2-create-page.png - 创建页面'); console.log('- step3-step2.png - 第二步(效果配置)'); console.log('- step4-step3.png - 第三步(生成)'); } catch (error) { console.error('\n❌ 测试失败:', error.message); await page.screenshot({ path: 'error-screenshot.png', fullPage: true }); console.log('错误截图已保存: error-screenshot.png'); } finally { console.log('\n按 Enter 键关闭浏览器...'); await new Promise(resolve => { process.stdin.once('data', () => { browser.close(); resolve(); }); }); } })();