test-pages.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const { chromium } = require('playwright');
  2. (async () => {
  3. console.log('🚀 启动浏览器测试...\n');
  4. const browser = await chromium.launch({ headless: false, slowMo: 500 });
  5. const context = await browser.newContext();
  6. const page = await context.newPage();
  7. // 基础 URL
  8. const baseUrl = 'http://localhost:5173';
  9. const pages = [
  10. { path: '/#/pages/index/index', name: '首页' },
  11. { path: '/#/pages/create/index', name: '生成页' },
  12. { path: '/#/pages/history/index', name: '历史页' },
  13. { path: '/#/pages/mine/index', name: '我的页' },
  14. { path: '/#/pages/book-generator/index', name: '书籍生成页' },
  15. { path: '/#/pages/video-generator/index', name: '视频生成页' },
  16. { path: '/#/pages/favorites/index', name: '收藏页' },
  17. { path: '/#/pages/search/index', name: '搜索页' },
  18. { path: '/#/pages/ai/index', name: 'AI页' },
  19. { path: '/#/pages/ai-content/index', name: 'AI内容页' },
  20. { path: '/#/pages/learning-path/index', name: '学习路径页' },
  21. { path: '/#/pages/album/index?id=1', name: '专辑/书籍详情页' },
  22. ];
  23. const errors = [];
  24. for (const pageInfo of pages) {
  25. try {
  26. console.log(`📄 测试页面: ${pageInfo.name}`);
  27. console.log(` URL: ${baseUrl}${pageInfo.path}`);
  28. await page.goto(`${baseUrl}${pageInfo.path}`, { waitUntil: 'networkidle', timeout: 10000 });
  29. // 等待页面加载
  30. await page.waitForTimeout(1000);
  31. // 截图
  32. const screenshotPath = `screenshot-${pageInfo.name.replace(/\//g, '-')}.png`;
  33. await page.screenshot({ path: screenshotPath });
  34. console.log(` ✅ 页面加载成功,截图已保存: ${screenshotPath}`);
  35. // 检查页面是否有明显错误
  36. const pageErrors = await page.evaluate(() => {
  37. return window.console?.errors || [];
  38. });
  39. if (pageErrors.length > 0) {
  40. console.log(` ⚠️ 页面有 ${pageErrors.length} 个控制台错误`);
  41. }
  42. // 尝试点击页面上的按钮
  43. const buttons = await page.$$('button, .btn, [class*="btn-"], [onclick], [@click]');
  44. console.log(` 🔘 发现 ${buttons.length} 个可点击元素`);
  45. // 点击前3个按钮(如果有)
  46. for (let i = 0; i < Math.min(3, buttons.length); i++) {
  47. try {
  48. await buttons[i].click({ timeout: 2000 });
  49. await page.waitForTimeout(500);
  50. console.log(` ✅ 点击了第 ${i + 1} 个按钮`);
  51. } catch (e) {
  52. console.log(` ⚠️ 点击第 ${i + 1} 个按钮失败: ${e.message}`);
  53. }
  54. }
  55. console.log('');
  56. } catch (error) {
  57. console.log(` ❌ 页面测试失败: ${error.message}`);
  58. errors.push({ page: pageInfo.name, error: error.message });
  59. console.log('');
  60. }
  61. }
  62. // 总结
  63. console.log('========================================');
  64. console.log('📊 测试总结:');
  65. console.log(` 总页面数: ${pages.length}`);
  66. console.log(` 成功: ${pages.length - errors.length}`);
  67. console.log(` 失败: ${errors.length}`);
  68. if (errors.length > 0) {
  69. console.log('\n❌ 失败的页面:');
  70. errors.forEach(e => {
  71. console.log(` - ${e.page}: ${e.error}`);
  72. });
  73. }
  74. console.log('\n⏸️ 浏览器将保持打开10秒,按 Ctrl+C 退出...');
  75. await page.waitForTimeout(10000);
  76. await browser.close();
  77. })();