08ea5fbe98
添加用户管理视图、API和状态管理文件
299 lines
10 KiB
TypeScript
299 lines
10 KiB
TypeScript
import { test, expect } from '../fixtures/test-fixtures';
|
|
|
|
test.describe('Admin角色管理功能测试', () => {
|
|
test.beforeEach(async ({ page, testConfig, testLogger }) => {
|
|
testLogger.startTest('Admin角色管理功能测试');
|
|
await page.goto(testConfig.getEnvironment().baseURL);
|
|
|
|
testLogger.startStep('前置步骤: 登录系统');
|
|
|
|
await page.fill('input[name="username"], input[placeholder*="用户名"]', 'admin');
|
|
await page.fill('input[name="password"], input[placeholder*="密码"]', 'admin123');
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForURL('**/dashboard');
|
|
|
|
testLogger.endStep('前置步骤: 登录系统', 'passed');
|
|
});
|
|
|
|
test.afterEach(async ({ testLogger }) => {
|
|
testLogger.endTest('Admin角色管理功能测试', 'passed');
|
|
});
|
|
|
|
test('TC-ADMIN-ROLE-001: 创建角色', async ({
|
|
page,
|
|
testDataManager,
|
|
formHelper,
|
|
tableHelper,
|
|
assertionHelper,
|
|
testLogger,
|
|
screenshotHelper
|
|
}) => {
|
|
testLogger.startStep('步骤1: 导航到角色管理页面');
|
|
|
|
await page.click('.menu-item:has-text("系统管理")');
|
|
await page.click('.menu-item:has-text("角色管理")');
|
|
await page.waitForURL('**/role-management');
|
|
|
|
testLogger.endStep('步骤1: 导航到角色管理页面', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 创建测试角色数据');
|
|
|
|
const testRole = await testDataManager.createTestRole({
|
|
roleName: 'Admin测试角色001',
|
|
roleCode: 'admin_test_role_001',
|
|
description: 'Admin测试角色描述'
|
|
});
|
|
|
|
testLogger.endStep('步骤2: 创建测试角色数据', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 点击新增按钮');
|
|
|
|
await page.click('button:has-text("新增")');
|
|
await assertionHelper.assertModalVisible(page, '新增角色对话框应该显示');
|
|
|
|
testLogger.endStep('步骤3: 点击新增按钮', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 填写角色表单');
|
|
|
|
await formHelper.fillForm({
|
|
'input[name="roleName"]': { value: testRole.roleName },
|
|
'input[name="roleCode"]': { value: testRole.roleCode },
|
|
'textarea[name="description"]': { value: testRole.description || '' }
|
|
});
|
|
|
|
await screenshotHelper.takeScreenshot('admin-role-form-filled');
|
|
|
|
testLogger.endStep('步骤4: 填写角色表单', 'passed');
|
|
|
|
testLogger.startStep('步骤5: 选择权限');
|
|
|
|
const permissionCheckboxes = page.locator('.permission-checkbox, input[type="checkbox"][name*="permission"]');
|
|
const checkboxCount = await permissionCheckboxes.count();
|
|
|
|
if (checkboxCount > 0) {
|
|
await permissionCheckboxes.nth(0).check();
|
|
await permissionCheckboxes.nth(1).check();
|
|
}
|
|
|
|
testLogger.endStep('步骤5: 选择权限', 'passed');
|
|
|
|
testLogger.startStep('步骤6: 提交表单');
|
|
|
|
await formHelper.submitForm('button[type="submit"]');
|
|
await assertionHelper.assertSuccessMessage(page, '角色创建成功消息应该显示');
|
|
|
|
testLogger.endStep('步骤6: 提交表单', 'passed');
|
|
|
|
testLogger.startStep('步骤7: 验证角色已创建');
|
|
|
|
await tableHelper.waitForTableLoad('.role-table', 1);
|
|
const matchingRows = await tableHelper.findRowsByCellText('.role-table', testRole.roleName);
|
|
|
|
expect(matchingRows.length).toBeGreaterThan(0);
|
|
|
|
testLogger.endStep('步骤7: 验证角色已创建', 'passed');
|
|
|
|
await screenshotHelper.takeScreenshotOnSuccess('admin-create-role');
|
|
});
|
|
|
|
test('TC-ADMIN-ROLE-002: 编辑角色', async ({
|
|
page,
|
|
testDataManager,
|
|
formHelper,
|
|
tableHelper,
|
|
assertionHelper,
|
|
testLogger,
|
|
screenshotHelper
|
|
}) => {
|
|
testLogger.startStep('步骤1: 创建测试角色');
|
|
|
|
const testRole = await testDataManager.createTestRole({
|
|
roleName: 'Admin测试角色002',
|
|
roleCode: 'admin_test_role_002',
|
|
description: 'Admin测试角色描述'
|
|
});
|
|
|
|
testLogger.endStep('步骤1: 创建测试角色', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 导航到角色管理页面');
|
|
|
|
await page.click('.menu-item:has-text("系统管理")');
|
|
await page.click('.menu-item:has-text("角色管理")');
|
|
await page.waitForURL('**/role-management');
|
|
|
|
testLogger.endStep('步骤2: 导航到角色管理页面', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 搜索角色');
|
|
|
|
await page.fill('input[placeholder*="搜索"], .search-input', testRole.roleName);
|
|
await page.click('button:has-text("搜索")');
|
|
await tableHelper.waitForTableLoad('.role-table', 1);
|
|
|
|
testLogger.endStep('步骤3: 搜索角色', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 点击编辑按钮');
|
|
|
|
await page.click('button:has-text("编辑")');
|
|
await assertionHelper.assertModalVisible(page, '编辑角色对话框应该显示');
|
|
|
|
testLogger.endStep('步骤4: 点击编辑按钮', 'passed');
|
|
|
|
testLogger.startStep('步骤5: 修改角色信息');
|
|
|
|
await formHelper.clearField('input[name="roleName"]');
|
|
await formHelper.fillField('input[name="roleName"]', '修改后的角色名');
|
|
|
|
testLogger.endStep('步骤5: 修改角色信息', 'passed');
|
|
|
|
testLogger.startStep('步骤6: 保存修改');
|
|
|
|
await formHelper.submitForm('button[type="submit"]');
|
|
await assertionHelper.assertSuccessMessage(page, '角色更新成功消息应该显示');
|
|
|
|
testLogger.endStep('步骤6: 保存修改', 'passed');
|
|
|
|
testLogger.startStep('步骤7: 验证修改已保存');
|
|
|
|
await page.fill('input[placeholder*="搜索"], .search-input', testRole.roleName);
|
|
await page.click('button:has-text("搜索")');
|
|
|
|
const rowText = await tableHelper.getRowText('.role-table', 1);
|
|
expect(rowText).toContain('修改后的角色名');
|
|
|
|
testLogger.endStep('步骤7: 验证修改已保存', 'passed');
|
|
|
|
await screenshotHelper.takeScreenshotOnSuccess('admin-edit-role');
|
|
});
|
|
|
|
test('TC-ADMIN-ROLE-003: 分配权限', async ({
|
|
page,
|
|
testDataManager,
|
|
formHelper,
|
|
tableHelper,
|
|
assertionHelper,
|
|
testLogger,
|
|
screenshotHelper
|
|
}) => {
|
|
testLogger.startStep('步骤1: 创建测试角色');
|
|
|
|
const testRole = await testDataManager.createTestRole({
|
|
roleName: 'Admin测试角色003',
|
|
roleCode: 'admin_test_role_003',
|
|
description: 'Admin测试角色描述'
|
|
});
|
|
|
|
testLogger.endStep('步骤1: 创建测试角色', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 导航到角色管理页面');
|
|
|
|
await page.click('.menu-item:has-text("系统管理")');
|
|
await page.click('.menu-item:has-text("角色管理")');
|
|
await page.waitForURL('**/role-management');
|
|
|
|
testLogger.endStep('步骤2: 导航到角色管理页面', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 搜索角色');
|
|
|
|
await page.fill('input[placeholder*="搜索"], .search-input', testRole.roleName);
|
|
await page.click('button:has-text("搜索")');
|
|
|
|
testLogger.endStep('步骤3: 搜索角色', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 点击权限分配按钮');
|
|
|
|
await page.click('button:has-text("权限分配")');
|
|
await assertionHelper.assertModalVisible(page, '权限分配对话框应该显示');
|
|
|
|
testLogger.endStep('步骤4: 点击权限分配按钮', 'passed');
|
|
|
|
testLogger.startStep('步骤5: 选择权限');
|
|
|
|
const permissionTree = page.locator('.permission-tree, .tree-container');
|
|
await permissionTree.waitFor({ state: 'visible' });
|
|
|
|
const firstPermission = permissionTree.locator('.tree-node-checkbox, input[type="checkbox"]').first();
|
|
await firstPermission.check();
|
|
|
|
testLogger.endStep('步骤5: 选择权限', 'passed');
|
|
|
|
testLogger.startStep('步骤6: 保存权限分配');
|
|
|
|
await page.click('button:has-text("保存")');
|
|
await assertionHelper.assertSuccessMessage(page, '权限分配成功消息应该显示');
|
|
|
|
testLogger.endStep('步骤6: 保存权限分配', 'passed');
|
|
|
|
testLogger.startStep('步骤7: 验证权限已分配');
|
|
|
|
await page.click('button:has-text("权限分配")');
|
|
await assertionHelper.assertModalVisible(page, '权限分配对话框应该显示');
|
|
|
|
const isChecked = await firstPermission.isChecked();
|
|
expect(isChecked).toBe(true);
|
|
|
|
testLogger.endStep('步骤7: 验证权限已分配', 'passed');
|
|
|
|
await screenshotHelper.takeScreenshotOnSuccess('admin-assign-permissions');
|
|
});
|
|
|
|
test('TC-ADMIN-ROLE-004: 删除角色', async ({
|
|
page,
|
|
testDataManager,
|
|
tableHelper,
|
|
assertionHelper,
|
|
testLogger,
|
|
screenshotHelper
|
|
}) => {
|
|
testLogger.startStep('步骤1: 创建测试角色');
|
|
|
|
const testRole = await testDataManager.createTestRole({
|
|
roleName: 'Admin测试角色004',
|
|
roleCode: 'admin_test_role_004',
|
|
description: 'Admin测试角色描述'
|
|
});
|
|
|
|
testLogger.endStep('步骤1: 创建测试角色', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 导航到角色管理页面');
|
|
|
|
await page.click('.menu-item:has-text("系统管理")');
|
|
await page.click('.menu-item:has-text("角色管理")');
|
|
await page.waitForURL('**/role-management');
|
|
|
|
testLogger.endStep('步骤2: 导航到角色管理页面', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 搜索角色');
|
|
|
|
await page.fill('input[placeholder*="搜索"], .search-input', testRole.roleName);
|
|
await page.click('button:has-text("搜索")');
|
|
|
|
testLogger.endStep('步骤3: 搜索角色', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 点击删除按钮');
|
|
|
|
await page.click('button:has-text("删除")');
|
|
await assertionHelper.assertModalVisible(page, '确认删除对话框应该显示');
|
|
|
|
testLogger.endStep('步骤4: 点击删除按钮', 'passed');
|
|
|
|
testLogger.startStep('步骤5: 确认删除');
|
|
|
|
await page.click('button:has-text("确认")');
|
|
await assertionHelper.assertSuccessMessage(page, '角色删除成功消息应该显示');
|
|
|
|
testLogger.endStep('步骤5: 确认删除', 'passed');
|
|
|
|
testLogger.startStep('步骤6: 验证角色已删除');
|
|
|
|
await page.fill('input[placeholder*="搜索"], .search-input', testRole.roleName);
|
|
await page.click('button:has-text("搜索")');
|
|
|
|
const rowCount = await tableHelper.getRowCount('.role-table');
|
|
expect(rowCount).toBe(0);
|
|
|
|
testLogger.endStep('步骤6: 验证角色已删除', 'passed');
|
|
|
|
await screenshotHelper.takeScreenshotOnSuccess('admin-delete-role');
|
|
});
|
|
});
|