/** * Admin 边界条件测试 * 测试各种边界条件下的系统行为 */ import { test, expect } from '../shared/fixtures/test-fixtures'; import { testLogger } from '../shared/utils/test-logger'; test.describe('用户管理边界条件测试 @boundary @admin', () => { test.beforeEach(async ({ loginPage }) => { await loginPage.navigate(); await loginPage.login('admin', 'admin123456'); }); test('创建用户 - 最小长度输入', async ({ userManagementPage, testData }) => { testLogger.startTest('创建用户 - 最小长度输入'); await userManagementPage.navigate(); await userManagementPage.clickAddUser(); // 只填写基本字段,验证表单可以正常输入 const boundaryData = testData.generateBoundaryUserData('min'); await userManagementPage.fillUserForm(boundaryData as any); // 验证表单字段已正确填写 const modal = userManagementPage['page'].locator('.el-dialog'); const usernameInput = modal.locator('input[placeholder="请输入用户名"]'); const usernameValue = await usernameInput.inputValue(); expect(usernameValue).toBe(boundaryData.username); testLogger.endTest('创建用户 - 最小长度输入', 'passed'); }); test('创建用户 - 最大长度输入', async ({ userManagementPage, testData }) => { testLogger.startTest('创建用户 - 最大长度输入'); await userManagementPage.navigate(); await userManagementPage.clickAddUser(); // 填写最大长度数据,验证表单可以正常输入 const boundaryData = testData.generateBoundaryUserData('max'); await userManagementPage.fillUserForm(boundaryData as any); // 验证表单字段已正确填写 const modal = userManagementPage['page'].locator('.el-dialog'); const usernameInput = modal.locator('input[placeholder="请输入用户名"]'); const usernameValue = await usernameInput.inputValue(); expect(usernameValue.length).toBeGreaterThanOrEqual(20); testLogger.endTest('创建用户 - 最大长度输入', 'passed'); }); test('创建用户 - 空值输入验证', async ({ userManagementPage, testData }) => { testLogger.startTest('创建用户 - 空值输入验证'); await userManagementPage.navigate(); await userManagementPage.clickAddUser(); // 直接点击提交,不填写任何字段 await userManagementPage['page'].locator('button:has-text("确定")').first().click(); // 等待表单验证提示出现 await userManagementPage.waitForTimeout(500); // 验证表单验证提示 - 使用更通用的选择器 const errorMessages = userManagementPage['page'].locator('.el-form-item__error, .el-message--error, .el-message--warning'); const hasError = await errorMessages.first().isVisible().catch(() => false); // 如果没有显示错误,验证至少模态框还在(说明表单没有提交) if (!hasError) { const modal = userManagementPage['page'].locator('.el-dialog'); await expect(modal).toBeVisible(); testLogger.info('表单验证通过:空值阻止了表单提交'); } else { testLogger.info('表单验证错误提示显示'); } testLogger.endTest('创建用户 - 空值输入验证', 'passed'); }); test('创建用户 - 特殊字符输入', async ({ userManagementPage, testData }) => { testLogger.startTest('创建用户 - 特殊字符输入'); await userManagementPage.navigate(); await userManagementPage.clickAddUser(); // 填写特殊字符数据,验证表单可以正常输入 const specialData = testData.generateBoundaryUserData('special'); await userManagementPage.fillUserForm(specialData as any); // 验证表单字段已正确填写 const modal = userManagementPage['page'].locator('.el-dialog'); const nicknameInput = modal.locator('input[placeholder="请输入昵称"]'); const nicknameValue = await nicknameInput.inputValue(); expect(nicknameValue).toContain('测试'); // 验证XSS防护 - 脚本标签应被转义或过滤 const pageContent = await userManagementPage['page'].content(); expect(pageContent).not.toContain(''); testLogger.endTest('创建用户 - 特殊字符输入', 'passed'); }); test('搜索用户 - 超长搜索关键词', async ({ userManagementPage }) => { testLogger.startTest('搜索用户 - 超长搜索关键词'); await userManagementPage.navigate(); const longKeyword = 'a'.repeat(200); await userManagementPage.searchUser(longKeyword); // 验证系统不会崩溃,正常返回空结果 await expect(userManagementPage['page'].locator('.el-table')).toBeVisible(); testLogger.endTest('搜索用户 - 超长搜索关键词', 'passed'); }); test('搜索用户 - 特殊字符搜索', async ({ userManagementPage }) => { testLogger.startTest('搜索用户 - 特殊字符搜索'); await userManagementPage.navigate(); const specialKeywords = ['