| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /**
- * L1 冒烟测试:核心前端页面加载
- * 使用 Playwright 浏览器打开关键页面,验证无控制台错误
- */
- import { test, expect } from '@playwright/test';
- const FRONTEND_URL = process.env.FRONTEND_URL || 'http://localhost:5173';
- /** 核心页面列表(TabBar 页面 + 关键业务页面) */
- const CORE_PAGES = [
- { name: '首页', path: '/#/pages/index/index' },
- { name: '生成页', path: '/#/pages/create/index' },
- { name: '书籍生成', path: '/#/pages/book-generator/index' },
- { name: '我的', path: '/#/pages/mine/index' },
- { name: '历史记录', path: '/#/pages/history/index' },
- { name: '播放器', path: '/#/pages/player/index' },
- { name: '会员中心', path: '/#/pages/member/index' },
- { name: '专辑列表', path: '/#/pages/albums/index' },
- ];
- test.describe('核心页面加载测试', () => {
- for (const pageInfo of CORE_PAGES) {
- test(`页面加载: ${pageInfo.name} (${pageInfo.path})`, async ({ page }) => {
- // 收集控制台错误
- const consoleErrors: string[] = [];
- page.on('console', msg => {
- if (msg.type() === 'error') {
- consoleErrors.push(msg.text());
- }
- });
- // 收集页面异常
- const pageErrors: string[] = [];
- page.on('pageerror', err => {
- pageErrors.push(err.message);
- });
- // 打开页面
- await page.goto(`${FRONTEND_URL}${pageInfo.path}`, {
- waitUntil: 'networkidle',
- timeout: 30000,
- });
- // 等待页面渲染
- await page.waitForTimeout(2000);
- // 验证页面标题存在(uni-app 页面至少有一个根元素)
- const appElement = await page.$('#app');
- expect(appElement).not.toBeNull();
- // 验证无严重 JS 错误
- // 注意:一些第三方库(如 uni-app)可能产生非关键警告,这里不视为失败
- const criticalErrors = consoleErrors.filter(
- e => !e.includes('favicon') && !e.includes('preload') && !e.includes('net::ERR')
- );
- const totalErrors = [...criticalErrors, ...pageErrors];
- if (totalErrors.length > 0) {
- console.warn(` ⚠ ${pageInfo.name} 存在 ${totalErrors.length} 个错误:`);
- totalErrors.forEach(e => console.warn(` - ${e}`));
- }
- // 截图保存
- await page.screenshot({
- path: `test-results/screenshots/smoke-${pageInfo.name}.png`,
- fullPage: true,
- }).catch(() => {});
- });
- }
- });
|