import { test, expect } from './test-fixtures.js'; /** * 角色管理模块完整测试套件 * 采用TDD方法:Red -> Green -> Refactor * 测试覆盖:CRUD操作、权限分配、搜索、表单验证 */ test.describe('角色管理 - 列表功能', () => { test.beforeEach(async ({ pageObjects, testData, testLogger }) => { testLogger.info('开始角色管理列表测试套件'); await pageObjects.loginPage.navigate(); await pageObjects.loginPage.login(testData.admin.username, testData.admin.password); await pageObjects.dashboardPage.waitForLoad(); await pageObjects.roleManagementPage.navigate(); await pageObjects.roleManagementPage.waitForLoad(); }); test.afterEach(async ({ testLogger, helpers }) => { testLogger.info('角色管理列表测试用例完成'); await helpers.screenshot.takeScreenshot('after-role-list-test'); }); test('应该显示角色列表页面', async ({ pageObjects, testLogger }) => { testLogger.startTest('角色列表页面显示'); try { const roleCount = await pageObjects.roleManagementPage.getRoleCount(); expect(roleCount).toBeGreaterThanOrEqual(0); testLogger.endTest('角色列表页面显示', 'passed'); } catch (error) { testLogger.endTest('角色列表页面显示', 'failed', error as Error); throw error; } }); test('应该能够搜索角色', async ({ pageObjects, testLogger }) => { testLogger.startTest('搜索角色功能'); try { await pageObjects.roleManagementPage.searchRole('admin'); const roleCount = await pageObjects.roleManagementPage.getRoleCount(); expect(roleCount).toBeGreaterThanOrEqual(0); testLogger.endTest('搜索角色功能', 'passed'); } catch (error) { testLogger.endTest('搜索角色功能', 'failed', error as Error); throw error; } }); }); test.describe('角色管理 - 创建角色', () => { test.beforeEach(async ({ pageObjects, testData, testLogger }) => { testLogger.info('开始创建角色测试套件'); await pageObjects.loginPage.navigate(); await pageObjects.loginPage.login(testData.admin.username, testData.admin.password); await pageObjects.dashboardPage.waitForLoad(); await pageObjects.roleManagementPage.navigate(); await pageObjects.roleManagementPage.waitForLoad(); }); test('应该成功创建新角色', async ({ pageObjects, testData, testLogger, helpers }) => { testLogger.startTest('创建新角色'); try { await pageObjects.roleManagementPage.clickAddRole(); await helpers.form.fillForm({ roleName: testData.role.name, roleKey: testData.role.code, status: testData.role.status }); await helpers.form.submitForm(); const successMessage = await pageObjects.roleManagementPage.getSuccessMessage(); expect(successMessage).toBeTruthy(); testLogger.endTest('创建新角色', 'passed'); } catch (error) { testLogger.endTest('创建新角色', 'failed', error as Error); throw error; } }); test('应该验证角色名称不能为空', async ({ pageObjects, testData, testLogger, helpers }) => { testLogger.startTest('角色名称空值验证'); try { await pageObjects.roleManagementPage.clickAddRole(); await helpers.form.fillForm({ roleKey: testData.role.code, status: testData.role.status }); await helpers.form.submitForm(); const errorMessage = await pageObjects.roleManagementPage.getErrorMessage(); expect(errorMessage).toBeTruthy(); testLogger.endTest('角色名称空值验证', 'passed'); } catch (error) { testLogger.endTest('角色名称空值验证', 'failed', error as Error); throw error; } }); test('应该验证角色标识不能为空', async ({ pageObjects, testData, testLogger, helpers }) => { testLogger.startTest('角色标识空值验证'); try { await pageObjects.roleManagementPage.clickAddRole(); await helpers.form.fillForm({ roleName: testData.role.name, status: testData.role.status }); await helpers.form.submitForm(); const errorMessage = await pageObjects.roleManagementPage.getErrorMessage(); expect(errorMessage).toBeTruthy(); testLogger.endTest('角色标识空值验证', 'passed'); } catch (error) { testLogger.endTest('角色标识空值验证', 'failed', error as Error); throw error; } }); }); test.describe('角色管理 - 编辑角色', () => { test.beforeEach(async ({ pageObjects, testData, testLogger }) => { testLogger.info('开始编辑角色测试套件'); await pageObjects.loginPage.navigate(); await pageObjects.loginPage.login(testData.admin.username, testData.admin.password); await pageObjects.dashboardPage.waitForLoad(); await pageObjects.roleManagementPage.navigate(); await pageObjects.roleManagementPage.waitForLoad(); }); test('应该成功编辑角色信息', async ({ pageObjects, testData, testLogger, helpers }) => { testLogger.startTest('编辑角色信息'); try { // 先搜索角色 await pageObjects.roleManagementPage.searchRole(testData.role.name); // 点击编辑按钮(第一行) await pageObjects.roleManagementPage.clickEditRole(0); // 修改角色描述 const updatedDescription = 'Updated role description'; await helpers.form.fillField('textarea[name="remark"]', updatedDescription); await helpers.form.submitForm(); const successMessage = await pageObjects.roleManagementPage.getSuccessMessage(); expect(successMessage).toBeTruthy(); testLogger.endTest('编辑角色信息', 'passed'); } catch (error) { testLogger.endTest('编辑角色信息', 'failed', error as Error); throw error; } }); }); test.describe('角色管理 - 删除角色', () => { test.beforeEach(async ({ pageObjects, testData, testLogger }) => { testLogger.info('开始删除角色测试套件'); await pageObjects.loginPage.navigate(); await pageObjects.loginPage.login(testData.admin.username, testData.admin.password); await pageObjects.dashboardPage.waitForLoad(); await pageObjects.roleManagementPage.navigate(); await pageObjects.roleManagementPage.waitForLoad(); }); test('应该成功删除角色', async ({ pageObjects, testData, testLogger }) => { testLogger.startTest('删除角色'); try { // 先搜索角色 await pageObjects.roleManagementPage.searchRole(testData.role.name); // 点击删除按钮(第一行) await pageObjects.roleManagementPage.clickDeleteRole(0); // 确认删除 await pageObjects.roleManagementPage.confirmDelete(); const successMessage = await pageObjects.roleManagementPage.getSuccessMessage(); expect(successMessage).toBeTruthy(); testLogger.endTest('删除角色', 'passed'); } catch (error) { testLogger.endTest('删除角色', 'failed', error as Error); throw error; } }); }); test.describe('角色管理 - 端到端流程', () => { test('应该完成完整的角色CRUD流程', async ({ pageObjects, testData, testLogger, helpers }) => { testLogger.startTest('完整角色CRUD流程'); try { // 步骤1: 登录 testLogger.startStep('用户登录'); await pageObjects.loginPage.navigate(); await pageObjects.loginPage.login(testData.admin.username, testData.admin.password); await pageObjects.dashboardPage.waitForLoad(); testLogger.endStep('用户登录', 'passed'); // 步骤2: 导航到角色管理 testLogger.startStep('导航到角色管理'); await pageObjects.roleManagementPage.navigate(); await pageObjects.roleManagementPage.waitForLoad(); testLogger.endStep('导航到角色管理', 'passed'); // 步骤3: 创建角色 testLogger.startStep('创建新角色'); await pageObjects.roleManagementPage.clickAddRole(); await helpers.form.fillForm({ roleName: testData.role.name, roleKey: testData.role.code, status: testData.role.status }); await helpers.form.submitForm(); testLogger.endStep('创建新角色', 'passed'); // 步骤4: 搜索角色 testLogger.startStep('搜索角色'); await pageObjects.roleManagementPage.searchRole(testData.role.name); const roleCount = await pageObjects.roleManagementPage.getRoleCount(); expect(roleCount).toBeGreaterThan(0); testLogger.endStep('搜索角色', 'passed'); // 步骤5: 编辑角色 testLogger.startStep('编辑角色'); await pageObjects.roleManagementPage.clickEditRole(0); await helpers.form.fillField('textarea[name="remark"]', 'Updated description'); await helpers.form.submitForm(); testLogger.endStep('编辑角色', 'passed'); // 步骤6: 删除角色 testLogger.startStep('删除角色'); await pageObjects.roleManagementPage.searchRole(testData.role.name); await pageObjects.roleManagementPage.clickDeleteRole(0); await pageObjects.roleManagementPage.confirmDelete(); testLogger.endStep('删除角色', 'passed'); testLogger.endTest('完整角色CRUD流程', 'passed'); } catch (error) { testLogger.endTest('完整角色CRUD流程', 'failed', error as Error); throw error; } }); });