import { test, expect } from '@playwright/test'; import { LoginPage } from './pages/LoginPage'; import { DashboardPage } from './pages/DashboardPage'; import { UserManagementPage } from './pages/UserManagementPage'; import { RoleManagementPage } from './pages/RoleManagementPage'; import { TestHelper } from './utils/testHelper'; test.describe('边缘场景测试', () => { let loginPage: LoginPage; let dashboardPage: DashboardPage; let userManagementPage: UserManagementPage; let roleManagementPage: RoleManagementPage; test.beforeEach(async ({ page }) => { loginPage = new LoginPage(page); dashboardPage = new DashboardPage(page); userManagementPage = new UserManagementPage(page); roleManagementPage = new RoleManagementPage(page); await loginPage.goto(); await loginPage.login('admin', 'admin123'); }); test.afterEach(async ({ page }) => { await TestHelper.clearAllStorage(page); }); test.describe('边界值测试', () => { test('用户名边界值 - 最小长度', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建最小长度用户名的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); const minUsername = 'ab'; await userManagementPage.fillUserForm({ username: minUsername, email: 'test@example.com', password: 'password123' }); await userManagementPage.submitForm(); }); await test.step('验证用户创建成功', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); test('用户名边界值 - 最大长度', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建最大长度用户名的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); const maxUsername = 'a'.repeat(50); await userManagementPage.fillUserForm({ username: maxUsername, email: 'test@example.com', password: 'password123' }); await userManagementPage.submitForm(); }); await test.step('验证用户创建成功', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); test('密码边界值 - 最小长度', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建最小长度密码的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); const minPassword = 'a'.repeat(6); await userManagementPage.fillUserForm({ username: 'testuser', email: 'test@example.com', password: minPassword }); await userManagementPage.submitForm(); }); await test.step('验证用户创建成功', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); test('密码边界值 - 最大长度', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建最大长度密码的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); const maxPassword = 'a'.repeat(20); await userManagementPage.fillUserForm({ username: 'testuser', email: 'test@example.com', password: maxPassword }); await userManagementPage.submitForm(); }); await test.step('验证用户创建成功', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); }); test.describe('空值和null值测试', () => { test('用户创建 - 用户名为空', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建用户名为空的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); await userManagementPage.fillUserForm({ username: '', email: 'test@example.com', password: 'password123' }); await userManagementPage.submitForm(); }); await test.step('验证用户名必填验证', async () => { await TestHelper.waitForErrorMessage(page); const errorMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(errorMessage).toContain('用户名不能为空'); }); }); test('用户创建 - 密码为空', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建密码为空的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); await userManagementPage.fillUserForm({ username: 'testuser', email: 'test@example.com', password: '' }); await userManagementPage.submitForm(); }); await test.step('验证密码必填验证', async () => { await TestHelper.waitForErrorMessage(page); const errorMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(errorMessage).toContain('密码不能为空'); }); }); test('用户创建 - 邮箱为空', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建邮箱为空的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); await userManagementPage.fillUserForm({ username: 'testuser', email: '', password: 'password123' }); await userManagementPage.submitForm(); }); await test.step('验证邮箱必填验证', async () => { await TestHelper.waitForErrorMessage(page); const errorMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(errorMessage).toContain('邮箱不能为空'); }); }); }); test.describe('特殊字符和格式测试', () => { test('用户名 - 包含中文字符', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建包含中文的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); await userManagementPage.fillUserForm({ username: '测试用户', email: 'test@example.com', password: 'password123' }); await userManagementPage.submitForm(); }); await test.step('验证中文用户名处理', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); test('用户名 - 包含emoji表情', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建包含emoji的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); await userManagementPage.fillUserForm({ username: 'test😀user', email: 'test@example.com', password: 'password123' }); await userManagementPage.submitForm(); }); await test.step('验证emoji用户名处理', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); test('密码 - 包含特殊字符', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建包含特殊字符密码的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); await userManagementPage.fillUserForm({ username: 'testuser', email: 'test@example.com', password: 'P@ssw0rd!#$' }); await userManagementPage.submitForm(); }); await test.step('验证特殊字符密码处理', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); }); test.describe('并发和竞态条件测试', () => { test('快速连续操作', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('快速连续点击创建按钮', async () => { for (let i = 0; i < 3; i++) { await page.click('.create-button'); await page.waitForTimeout(100); } }); await test.step('验证重复点击处理', async () => { const dialogs = await page.locator('.el-dialog').count(); expect(dialogs).toBe(1); }); }); }); test.describe('国际化场景测试', () => { test('中文界面操作', async ({ page }) => { await test.step('验证中文界面显示', async () => { const dashboardTitle = await page.textContent('h1'); expect(dashboardTitle).toContain('仪表盘'); }); await test.step('验证中文按钮文本', async () => { const createButton = await page.textContent('.create-button'); expect(createButton).toContain('创建'); }); }); test('中英文混合输入', async ({ page }) => { await dashboardPage.navigateToUserManagement(); await TestHelper.waitForPageLoad(page); await test.step('创建中英文混合用户名的用户', async () => { await userManagementPage.clickCreateUser(); await TestHelper.waitForElementVisible(page, '.el-dialog'); await userManagementPage.fillUserForm({ username: 'test测试user', email: 'test@example.com', password: 'password123' }); await userManagementPage.submitForm(); }); await test.step('验证中英文混合处理', async () => { await TestHelper.waitForSuccessMessage(page); const successMessage = await TestHelper.getElementText(page, '.el-message__content'); expect(successMessage).toContain('创建成功'); }); }); }); });