full-test.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. const { chromium } = require('playwright');
  2. const path = require('path');
  3. const fs = require('fs');
  4. (async () => {
  5. const browser = await chromium.launch({ headless: false }); // 显示浏览器窗口
  6. const context = await browser.newContext();
  7. const page = await context.newPage();
  8. console.log('=== 视频生成功能完整测试 ===\n');
  9. try {
  10. // 1. 打开视频生成列表页面
  11. console.log('1. 打开视频生成列表页面...');
  12. await page.goto('http://localhost:5173/#/pages/video-generator/index', {
  13. waitUntil: 'networkidle',
  14. timeout: 30000
  15. });
  16. await page.waitForTimeout(3000);
  17. await page.screenshot({ path: 'step1-list-page.png', fullPage: true });
  18. console.log(' ✅ 页面加载成功,已保存截图: step1-list-page.png');
  19. // 检查控制台错误
  20. const errors = [];
  21. page.on('console', msg => {
  22. if (msg.type() === 'error') {
  23. errors.push(msg.text());
  24. }
  25. });
  26. // 2. 点击创建新视频按钮
  27. console.log('\n2. 点击创建新视频按钮...');
  28. const createBtn = await page.locator('text=创建新视频').first();
  29. if (await createBtn.isVisible()) {
  30. await createBtn.click();
  31. await page.waitForTimeout(2000);
  32. await page.screenshot({ path: 'step2-create-page.png', fullPage: true });
  33. console.log(' ✅ 进入创建页面,已保存截图: step2-create-page.png');
  34. } else {
  35. console.log(' ⚠️ 未找到创建按钮');
  36. }
  37. // 3. 输入标题
  38. console.log('\n3. 输入视频标题...');
  39. const titleInput = await page.locator('input[placeholder="给视频起个标题"]').first();
  40. if (await titleInput.isVisible()) {
  41. await titleInput.fill('自动化测试视频');
  42. console.log(' ✅ 标题输入成功');
  43. } else {
  44. console.log(' ⚠️ 未找到标题输入框');
  45. }
  46. // 4. 检查页面结构
  47. console.log('\n4. 检查页面结构...');
  48. const stepNav = await page.locator('.step-nav').isVisible();
  49. const addImageBtn = await page.locator('text=添加图片').isVisible();
  50. const addAudioBtn = await page.locator('text=添加音频').isVisible();
  51. const nextBtn = await page.locator('text=下一步').isVisible();
  52. console.log(' - 步骤导航:', stepNav ? '✅' : '❌');
  53. console.log(' - 添加图片按钮:', addImageBtn ? '✅' : '❌');
  54. console.log(' - 添加音频按钮:', addAudioBtn ? '✅' : '❌');
  55. console.log(' - 下一步按钮:', nextBtn ? '✅' : '❌');
  56. // 5. 点击下一步到第二步
  57. console.log('\n5. 跳转到第二步...');
  58. if (nextBtn) {
  59. await page.locator('text=下一步').click();
  60. await page.waitForTimeout(1000);
  61. await page.screenshot({ path: 'step3-step2.png', fullPage: true });
  62. console.log(' ✅ 已进入第二步,已保存截图: step3-step2.png');
  63. }
  64. // 6. 点击下一步到第三步
  65. console.log('\n6. 跳转到第三步(生成页面)...');
  66. const nextBtn2 = await page.locator('text=下一步').isVisible();
  67. if (nextBtn2) {
  68. await page.locator('text=下一步').click();
  69. await page.waitForTimeout(1000);
  70. await page.screenshot({ path: 'step4-step3.png', fullPage: true });
  71. console.log(' ✅ 已进入第三步,已保存截图: step4-step3.png');
  72. }
  73. // 7. 检查生成按钮
  74. console.log('\n7. 检查生成按钮...');
  75. const generateBtn = await page.locator('text=开始生成视频').isVisible();
  76. console.log(' - 生成按钮:', generateBtn ? '✅' : '❌');
  77. // 8. 检查控制台错误
  78. console.log('\n8. 检查控制台错误...');
  79. if (errors.length > 0) {
  80. console.log(' ⚠️ 发现控制台错误:');
  81. errors.forEach((err, i) => {
  82. console.log(` ${i + 1}. ${err}`);
  83. });
  84. } else {
  85. console.log(' ✅ 无控制台错误');
  86. }
  87. // 9. 测试API连接
  88. console.log('\n9. 测试后端API...');
  89. const apiTest = await page.evaluate(async () => {
  90. try {
  91. const res = await fetch('http://localhost:3000/api/video/projects');
  92. const data = await res.json();
  93. return { status: res.status, success: data.success, data: data.data };
  94. } catch (e) {
  95. return { error: e.message };
  96. }
  97. });
  98. if (apiTest.error) {
  99. console.log(' ❌ API连接失败:', apiTest.error);
  100. } else {
  101. console.log(' ✅ API连接成功');
  102. console.log(' - 状态码:', apiTest.status);
  103. console.log(' - 响应格式正确:', apiTest.success ? '✅' : '❌');
  104. console.log(' - 项目数量:', apiTest.data?.items?.length || 0);
  105. }
  106. // 10. 总结
  107. console.log('\n' + '='.repeat(50));
  108. console.log('测试完成!');
  109. console.log('='.repeat(50));
  110. console.log('\n截图已保存:');
  111. console.log('- step1-list-page.png - 列表页面');
  112. console.log('- step2-create-page.png - 创建页面');
  113. console.log('- step3-step2.png - 第二步(效果配置)');
  114. console.log('- step4-step3.png - 第三步(生成)');
  115. } catch (error) {
  116. console.error('\n❌ 测试失败:', error.message);
  117. await page.screenshot({ path: 'error-screenshot.png', fullPage: true });
  118. console.log('错误截图已保存: error-screenshot.png');
  119. } finally {
  120. console.log('\n按 Enter 键关闭浏览器...');
  121. await new Promise(resolve => {
  122. process.stdin.once('data', () => {
  123. browser.close();
  124. resolve();
  125. });
  126. });
  127. }
  128. })();