import { test, expect, Page } from '@playwright/test'; import { LoginPage } from './pages/LoginPage'; import { UserManagementPage } from './pages/UserManagementPage'; test.describe('关键业务流程E2E测试', () => { let loginPage: LoginPage; let userManagementPage: UserManagementPage; test.beforeEach(async ({ page }) => { await page.goto('/'); await page.waitForLoadState('domcontentloaded'); loginPage = new LoginPage(page); userManagementPage = new UserManagementPage(page); }); test.afterEach(async ({ page }) => { await page.evaluate(() => { localStorage.clear(); sessionStorage.clear(); }); }); test('1. 用户登录流程', async ({ page }) => { await loginPage.goto(); await loginPage.login('admin', 'admin123'); await expect(page).toHaveURL(/\/(dashboard|\/)$/, { timeout: 10000 }); await expect(page.locator('.dashboard')).toBeVisible(); const token = await page.evaluate(() => localStorage.getItem('token')); expect(token).toBeTruthy(); }); test('2. 用户创建流程', async ({ page }) => { await loginPage.goto(); await loginPage.login('admin', 'admin123'); await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 }); await userManagementPage.goto(); await userManagementPage.waitForTableReady(); const uuid = Math.random().toString(36).substring(2, 15); const username = `user_${uuid}`; await userManagementPage.clickCreateUser(); await userManagementPage.fillUserForm({ username: username, password: 'Test@123', email: `${username}@test.com`, phone: '13800138000', nickname: `测试用户${Date.now()}` }); await userManagementPage.submitForm(); const success = await userManagementPage.waitForSuccessMessage(); expect(success).toBeTruthy(); }); test('3. 管理员权限验证', async ({ page }) => { await loginPage.goto(); await loginPage.login('admin', 'admin123'); await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 }); await userManagementPage.goto(); await expect(userManagementPage.table).toBeVisible({ timeout: 5000 }); const userCount = await userManagementPage.getUserCount(); expect(userCount).toBeGreaterThan(0); }); test('4. 未登录用户访问受保护页面', async ({ page }) => { await page.goto('/dashboard'); await page.waitForURL(/\/login/, { timeout: 10000 }); await expect(page.locator('input[placeholder="请输入用户名"]')).toBeVisible(); }); test('5. 登出流程', async ({ page }) => { await loginPage.goto(); await loginPage.login('admin', 'admin123'); await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 }); const avatar = page.locator('.el-avatar'); await avatar.click(); await page.waitForTimeout(1000); const logoutButton = page.locator('.el-dropdown-menu').getByText('退出登录'); await logoutButton.click(); await page.waitForURL(/\/login/, { timeout: 10000 }); await expect(page.locator('input[placeholder="请输入用户名"]')).toBeVisible(); }); });