/** * 仪表盘 E2E 测试 * 验证: 统计数据、活动列表、快捷操作 */ import { TEST_CONFIG } from './config'; export const dashboardE2ETests = { name: '仪表盘完整 E2E 测试', /** * 执行完整的仪表盘测试流程 */ async runFullTest() { console.log('\n🧪 开始仪表盘完整 E2E 测试'); // 步骤 1: 登录 await this.login(); // 步骤 2: 验证仪表盘数据加载 await this.verifyDashboardStats(); // 步骤 3: 验证最近活动 await this.verifyRecentActivities(); // 步骤 4: 验证快捷操作 await this.verifyQuickActions(); console.log('\n✅ 仪表盘完整 E2E 测试通过!'); }, /** * 登录系统 */ async login() { console.log('\n📋 步骤 1: 登录系统'); await mcp__plugin_playwright_playwright__browser_navigate({ url: `${TEST_CONFIG.baseURL}/login`, }); await mcp__plugin_playwright_playwright__browser_wait_for({ time: 2 }); // 填写登录表单 await mcp__plugin_playwright_playwright__browser_type({ ref: 'e25', text: TEST_CONFIG.testUser.email, }); await mcp__plugin_playwright_playwright__browser_type({ ref: 'e33', text: TEST_CONFIG.testUser.password, }); await mcp__plugin_playwright_playwright__browser_click({ element: '登录按钮', ref: 'e34', }); await mcp__plugin_playwright_playwright__browser_wait_for({ time: 3 }); // 验证登录成功 const snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); if (!snapshot.includes('仪表盘')) { throw new Error('登录失败,未显示仪表盘'); } console.log('✅ 登录成功'); }, /** * 验证仪表盘统计数据 */ async verifyDashboardStats() { console.log('\n📋 步骤 2: 验证仪表盘统计数据'); // 导航到仪表盘 await mcp__plugin_playwright_playwright__browser_navigate({ url: `${TEST_CONFIG.baseURL}/dashboard`, }); await mcp__plugin_playwright_playwright__browser_wait_for({ time: 3 }); const snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); // 验证统计卡片存在 const requiredStats = ['总用户数', '活跃用户', '系统负载', '数据库状态']; for (const stat of requiredStats) { if (!snapshot.includes(stat)) { throw new Error(`未找到统计项: ${stat}`); } } // 验证数据已加载(不是显示 '-') const hasRealData = /总用户数[^]*?\d+/.test(snapshot); if (!hasRealData) { throw new Error('仪表盘数据未正确加载'); } // 验证数据库状态显示正常 if (!snapshot.includes('正常') && !snapshot.includes('数据库状态')) { throw new Error('数据库状态未显示'); } console.log('✅ 仪表盘统计数据验证通过'); console.log(' - 总用户数: 已显示'); console.log(' - 活跃用户: 已显示'); console.log(' - 系统负载: 已显示'); console.log(' - 数据库状态: 已显示'); }, /** * 验证最近活动列表 */ async verifyRecentActivities() { console.log('\n📋 步骤 3: 验证最近活动列表'); const snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); // 验证活动列表标题 if (!snapshot.includes('最近活动')) { throw new Error('未找到最近活动列表'); } // 验证活动项格式(应该有用户邮箱、操作、时间) // 活动项应该包含 @ 符号(邮箱) const hasActivityItems = snapshot.includes('@') && (snapshot.includes('登录系统') || snapshot.includes('更新资料') || snapshot.includes('创建用户')); if (!hasActivityItems) { throw new Error('最近活动列表未正确显示活动项'); } // 验证状态指示器(绿色/红色圆点) // 在 snapshot 中可能显示为样式类名 const hasStatusIndicator = snapshot.includes('success') || snapshot.includes('error') || snapshot.includes('bg-green-500') || snapshot.includes('bg-red-500'); if (!hasStatusIndicator) { console.log(' ⚠️ 未检测到状态指示器样式'); } console.log('✅ 最近活动列表验证通过'); }, /** * 验证快捷操作按钮 */ async verifyQuickActions() { console.log('\n📋 步骤 4: 验证快捷操作'); const snapshot = await mcp__plugin_playwright_playwright__browser_snapshot({}); // 验证快捷操作标题 if (!snapshot.includes('快捷操作')) { throw new Error('未找到快捷操作区域'); } // 验证快捷操作按钮 const requiredActions = ['添加用户', '系统设置', '数据备份', '查看日志']; for (const action of requiredActions) { if (!snapshot.includes(action)) { throw new Error(`未找到快捷操作: ${action}`); } } // 测试点击"添加用户"快捷操作 await mcp__plugin_playwright_playwright__browser_click({ element: '添加用户快捷操作', ref: 'e220', }); await mcp__plugin_playwright_playwright__browser_wait_for({ time: 1 }); // 验证是否导航到用户管理页面 const currentUrl = await mcp__plugin_playwright_playwright__browser_evaluate({ function: '() => window.location.pathname', }); if (currentUrl !== '/users') { console.log(` ⚠️ 点击添加用户后 URL 为 ${currentUrl},期望 /users`); } else { console.log(' ✅ 点击添加用户快捷操作成功导航到用户管理页面'); } console.log('✅ 快捷操作验证通过'); }, }; export default dashboardE2ETests;