Files
everything-is-suitable/everything-is-suitable-test/e2e/examples/user-management.spec.ts
T
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

305 lines
10 KiB
TypeScript

import { test, expect } from '../fixtures/test-fixtures';
test.describe('用户管理功能测试', () => {
test.beforeEach(async ({ page, testConfig, testLogger }) => {
testLogger.startTest('用户管理功能测试');
await page.goto(testConfig.getEnvironment().baseURL);
});
test.afterEach(async ({ testLogger }) => {
testLogger.endTest('用户管理功能测试', 'passed');
});
test('TC-USER-001: 创建新用户流程', async ({
page,
testDataManager,
formHelper,
tableHelper,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 创建测试用户数据');
const testUser = await testDataManager.createTestUser({
realName: 'E2E测试用户001',
email: 'e2e_test_001@example.com'
});
testLogger.endStep('步骤1: 创建测试用户数据', 'passed');
testLogger.startStep('步骤2: 导航到用户管理页面');
await page.click('.menu-item:has-text("系统管理")');
await page.click('.menu-item:has-text("用户管理")');
await page.waitForURL('**/user-management');
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="username"]': { value: testUser.username },
'input[name="realName"]': { value: testUser.realName || '' },
'input[name="email"]': { value: testUser.email || '' },
'input[name="phone"]': { value: testUser.phone || '' }
});
await screenshotHelper.takeScreenshot('user-form-filled');
testLogger.endStep('步骤4: 填写用户表单', 'passed');
testLogger.startStep('步骤5: 提交表单');
await formHelper.submitForm('button[type="submit"]');
await assertionHelper.assertSuccessMessage(page, '用户创建成功消息应该显示');
testLogger.endStep('步骤5: 提交表单', 'passed');
testLogger.startStep('步骤6: 验证用户已创建');
await tableHelper.waitForTableLoad('.user-table', 1);
const matchingRows = await tableHelper.findRowsByCellText('.user-table', testUser.username);
expect(matchingRows.length).toBeGreaterThan(0);
testLogger.endStep('步骤6: 验证用户已创建', 'passed');
testLogger.startStep('步骤7: 搜索用户');
await page.fill('input[placeholder="搜索用户名"]', testUser.username);
await page.click('button:has-text("搜索")');
await tableHelper.waitForTableLoad('.user-table', 1);
const rowText = await tableHelper.getRowText('.user-table', 1);
expect(rowText).toContain(testUser.username);
testLogger.endStep('步骤7: 搜索用户', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('create-user');
});
test('TC-USER-002: 编辑用户信息', async ({
page,
testDataManager,
formHelper,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 创建测试用户');
const testUser = await testDataManager.createTestUser({
realName: 'E2E测试用户002',
email: 'e2e_test_002@example.com'
});
testLogger.endStep('步骤1: 创建测试用户', 'passed');
testLogger.startStep('步骤2: 导航到用户管理页面');
await page.click('.menu-item:has-text("系统管理")');
await page.click('.menu-item:has-text("用户管理")');
await page.waitForURL('**/user-management');
testLogger.endStep('步骤2: 导航到用户管理页面', 'passed');
testLogger.startStep('步骤3: 搜索用户');
await page.fill('input[placeholder="搜索用户名"]', testUser.username);
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 formHelper.clearField('input[name="realName"]');
await formHelper.fillField('input[name="realName"]', '修改后的用户名');
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="搜索用户名"]', testUser.username);
await page.click('button:has-text("搜索")');
const rowText = await page.locator('.user-table tbody tr').first().textContent();
expect(rowText).toContain('修改后的用户名');
testLogger.endStep('步骤7: 验证修改已保存', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('edit-user');
});
test('TC-USER-003: 删除用户', async ({
page,
testDataManager,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 创建测试用户');
const testUser = await testDataManager.createTestUser({
realName: 'E2E测试用户003',
email: 'e2e_test_003@example.com'
});
testLogger.endStep('步骤1: 创建测试用户', 'passed');
testLogger.startStep('步骤2: 导航到用户管理页面');
await page.click('.menu-item:has-text("系统管理")');
await page.click('.menu-item:has-text("用户管理")');
await page.waitForURL('**/user-management');
testLogger.endStep('步骤2: 导航到用户管理页面', 'passed');
testLogger.startStep('步骤3: 搜索用户');
await page.fill('input[placeholder="搜索用户名"]', testUser.username);
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="搜索用户名"]', testUser.username);
await page.click('button:has-text("搜索")');
const rowCount = await page.locator('.user-table tbody tr').count();
expect(rowCount).toBe(0);
testLogger.endStep('步骤6: 验证用户已删除', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('delete-user');
});
test('TC-USER-004: 用户列表分页功能', async ({
page,
tableHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 导航到用户管理页面');
await page.click('.menu-item:has-text("系统管理")');
await page.click('.menu-item:has-text("用户管理")');
await page.waitForURL('**/user-management');
testLogger.endStep('步骤1: 导航到用户管理页面', 'passed');
testLogger.startStep('步骤2: 获取分页信息');
const paginationInfo = await tableHelper.getPaginationInfo('.user-table');
expect(paginationInfo.currentPage).toBe(1);
expect(paginationInfo.totalRecords).toBeGreaterThan(0);
testLogger.endStep('步骤2: 获取分页信息', 'passed');
testLogger.startStep('步骤3: 切换到下一页');
if (paginationInfo.totalPages > 1) {
await tableHelper.goToPage('.user-table', 2);
await tableHelper.waitForTableLoad('.user-table', 1);
const updatedPaginationInfo = await tableHelper.getPaginationInfo('.user-table');
expect(updatedPaginationInfo.currentPage).toBe(2);
} else {
testLogger.info('只有一页数据,跳过分页测试');
}
testLogger.endStep('步骤3: 切换到下一页', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('user-pagination');
});
test('TC-USER-005: 用户搜索功能', async ({
page,
testDataManager,
tableHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 创建多个测试用户');
const user1 = await testDataManager.createTestUser({
realName: '搜索测试用户1',
email: 'search_test_1@example.com'
});
const user2 = await testDataManager.createTestUser({
realName: '搜索测试用户2',
email: 'search_test_2@example.com'
});
testLogger.endStep('步骤1: 创建多个测试用户', 'passed');
testLogger.startStep('步骤2: 导航到用户管理页面');
await page.click('.menu-item:has-text("系统管理")');
await page.click('.menu-item:has-text("用户管理")');
await page.waitForURL('**/user-management');
testLogger.endStep('步骤2: 导航到用户管理页面', 'passed');
testLogger.startStep('步骤3: 按用户名搜索');
await page.fill('input[placeholder="搜索用户名"]', user1.username);
await page.click('button:has-text("搜索")');
const matchingRows = await tableHelper.findRowsByCellText('.user-table', user1.username);
expect(matchingRows.length).toBeGreaterThan(0);
testLogger.endStep('步骤3: 按用户名搜索', 'passed');
testLogger.startStep('步骤4: 清空搜索条件');
await page.click('button:has-text("重置")');
await tableHelper.waitForTableLoad('.user-table', 1);
const allRows = await tableHelper.getRowCount('.user-table');
expect(allRows).toBeGreaterThan(0);
testLogger.endStep('步骤4: 清空搜索条件', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('user-search');
});
});