import { test, expect } from '@playwright/test'; import { LoginPage } from '../pages/LoginPage'; test.describe('UAT: 认证功能验收', () => { test('UAT-AUTH-01: 有效凭据登录成功', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.login('admin', 'Test@123'); await expect(page).toHaveURL(/.*dashboard/); }); test('UAT-AUTH-02: 无效密码登录失败', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.loginAndExpectError('admin', 'wrong_password'); await expect(page).toHaveURL(/.*login/); }); test('UAT-AUTH-03: 空用户名提交被阻止', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.passwordInput.fill('somepassword'); await loginPage.loginButton.click(); await expect(page.locator('.ant-form-item-explain-error').first()).toBeVisible({ timeout: 5000 }); }); test('UAT-AUTH-04: 空密码提交被阻止', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.usernameInput.fill('admin'); await loginPage.loginButton.click(); await expect(page.locator('.ant-form-item-explain-error').first()).toBeVisible({ timeout: 5000 }); }); test('UAT-AUTH-05: 登出后 Token 被清除', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.login('admin', 'Test@123'); await expect(page).toHaveURL(/.*dashboard/); const tokenBefore = await page.evaluate(() => localStorage.getItem('token')); expect(tokenBefore).not.toBeNull(); await loginPage.logout(); const tokenAfter = await page.evaluate(() => localStorage.getItem('token')); expect(tokenAfter).toBeNull(); }); test('UAT-AUTH-06: 未认证访问受保护路由重定向', async ({ page }) => { await page.goto('/users'); await page.waitForTimeout(2000); await expect(page).toHaveURL(/.*login/, { timeout: 10000 }); }); test('UAT-AUTH-07: 登录页面 UI 元素完整性', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await expect(loginPage.usernameInput).toBeVisible(); await expect(loginPage.passwordInput).toBeVisible(); await expect(loginPage.loginButton).toBeVisible(); await expect(page.locator('input[placeholder="用户名"]')).toBeVisible(); await expect(page.locator('input[placeholder="密码"]')).toBeVisible(); }); });