Files
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

249 lines
9.0 KiB
TypeScript

import { test, expect } from '../fixtures/test-fixtures';
test.describe('Uniapp用户功能测试', () => {
test.beforeEach(async ({ page, testConfig, testLogger }) => {
testLogger.startTest('Uniapp用户功能测试');
await page.goto(testConfig.getEnvironment().uniappBaseURL);
});
test.afterEach(async ({ testLogger }) => {
testLogger.endTest('Uniapp用户功能测试', 'passed');
});
test('TC-USER-001: 用户登录功能', async ({
page,
formHelper,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 点击登录按钮');
const loginButton = page.locator('.login-button, button:has-text("登录")');
await loginButton.click();
testLogger.endStep('步骤1: 点击登录按钮', 'passed');
testLogger.startStep('步骤2: 验证登录表单显示');
await assertionHelper.assertModalVisible(page, '登录弹窗应该显示');
await assertionHelper.assertElementVisible(page, '.login-form, .auth-form', '登录表单应该显示');
testLogger.endStep('步骤2: 验证登录表单显示', 'passed');
testLogger.startStep('步骤3: 填写登录信息');
await formHelper.fillForm({
'input[name="username"], input[placeholder*="用户名"]': { value: 'testuser' },
'input[name="password"], input[placeholder*="密码"]': { value: 'password123' }
});
testLogger.endStep('步骤3: 填写登录信息', 'passed');
testLogger.startStep('步骤4: 提交登录表单');
await formHelper.submitForm('button[type="submit"], button:has-text("登录")');
testLogger.endStep('步骤4: 提交登录表单', 'passed');
testLogger.startStep('步骤5: 验证登录成功');
await assertionHelper.assertToastVisible(page, '登录成功提示应该显示');
await assertionHelper.assertElementVisible(page, '.user-avatar, .user-info', '用户信息应该显示');
testLogger.endStep('步骤5: 验证登录成功', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('user-login');
});
test('TC-USER-002: 用户注册功能', async ({
page,
formHelper,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 点击注册按钮');
const registerButton = page.locator('.register-button, button:has-text("注册")');
await registerButton.click();
testLogger.endStep('步骤1: 点击注册按钮', 'passed');
testLogger.startStep('步骤2: 验证注册表单显示');
await assertionHelper.assertModalVisible(page, '注册弹窗应该显示');
await assertionHelper.assertElementVisible(page, '.register-form, .auth-form', '注册表单应该显示');
testLogger.endStep('步骤2: 验证注册表单显示', 'passed');
testLogger.startStep('步骤3: 填写注册信息');
const timestamp = Date.now();
await formHelper.fillForm({
'input[name="username"], input[placeholder*="用户名"]': { value: `testuser_${timestamp}` },
'input[name="password"], input[placeholder*="密码"]': { value: 'Password@123' },
'input[name="confirmPassword"], input[placeholder*="确认密码"]': { value: 'Password@123' },
'input[name="email"], input[placeholder*="邮箱"]': { value: `test_${timestamp}@example.com` },
'input[name="phone"], input[placeholder*="手机号"]': { value: '13800138000' }
});
testLogger.endStep('步骤3: 填写注册信息', 'passed');
testLogger.startStep('步骤4: 同意用户协议');
const agreeCheckbox = page.locator('input[type="checkbox"][name="agree"]');
await agreeCheckbox.check();
testLogger.endStep('步骤4: 同意用户协议', 'passed');
testLogger.startStep('步骤5: 提交注册表单');
await formHelper.submitForm('button[type="submit"], button:has-text("注册")');
testLogger.endStep('步骤5: 提交注册表单', 'passed');
testLogger.startStep('步骤6: 验证注册成功');
await assertionHelper.assertToastVisible(page, '注册成功提示应该显示');
await assertionHelper.assertModalHidden(page, '注册弹窗应该关闭');
testLogger.endStep('步骤6: 验证注册成功', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('user-register');
});
test('TC-USER-003: 用户信息修改', async ({
page,
formHelper,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 进入个人中心');
const profileButton = page.locator('.profile-button, .user-avatar');
await profileButton.click();
testLogger.endStep('步骤1: 进入个人中心', 'passed');
testLogger.startStep('步骤2: 点击编辑资料按钮');
const editButton = page.locator('.edit-profile, button:has-text("编辑")');
await editButton.click();
testLogger.endStep('步骤2: 点击编辑资料按钮', 'passed');
testLogger.startStep('步骤3: 修改用户信息');
await formHelper.fillForm({
'input[name="nickname"], input[placeholder*="昵称"]': { value: '新昵称' },
'input[name="signature"], textarea[placeholder*="签名"]': { value: '这是我的个性签名' }
});
testLogger.endStep('步骤3: 修改用户信息', 'passed');
testLogger.startStep('步骤4: 保存修改');
await formHelper.submitForm('button[type="submit"], button:has-text("保存")');
testLogger.endStep('步骤4: 保存修改', 'passed');
testLogger.startStep('步骤5: 验证修改成功');
await assertionHelper.assertToastVisible(page, '保存成功提示应该显示');
const nicknameElement = page.locator('.user-nickname');
const nicknameText = await nicknameElement.textContent();
expect(nicknameText).toContain('新昵称');
testLogger.endStep('步骤5: 验证修改成功', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('user-edit-profile');
});
test('TC-USER-004: 用户退出登录', async ({
page,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 进入个人中心');
const profileButton = page.locator('.profile-button, .user-avatar');
await profileButton.click();
testLogger.endStep('步骤1: 进入个人中心', 'passed');
testLogger.startStep('步骤2: 点击退出登录按钮');
const logoutButton = page.locator('.logout-button, button:has-text("退出")');
await logoutButton.click();
testLogger.endStep('步骤2: 点击退出登录按钮', 'passed');
testLogger.startStep('步骤3: 确认退出');
const confirmButton = page.locator('.confirm-button, button:has-text("确认")');
await confirmButton.click();
testLogger.endStep('步骤3: 确认退出', 'passed');
testLogger.startStep('步骤4: 验证退出成功');
await assertionHelper.assertToastVisible(page, '退出成功提示应该显示');
await assertionHelper.assertElementVisible(page, '.login-button, button:has-text("登录")', '登录按钮应该显示');
testLogger.endStep('步骤4: 验证退出成功', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('user-logout');
});
test('TC-USER-005: 用户密码修改', async ({
page,
formHelper,
assertionHelper,
testLogger,
screenshotHelper
}) => {
testLogger.startStep('步骤1: 进入个人中心');
const profileButton = page.locator('.profile-button, .user-avatar');
await profileButton.click();
testLogger.endStep('步骤1: 进入个人中心', 'passed');
testLogger.startStep('步骤2: 点击修改密码按钮');
const changePasswordButton = page.locator('.change-password, button:has-text("修改密码")');
await changePasswordButton.click();
testLogger.endStep('步骤2: 点击修改密码按钮', 'passed');
testLogger.startStep('步骤3: 填写密码修改表单');
await formHelper.fillForm({
'input[name="oldPassword"], input[placeholder*="旧密码"]': { value: 'password123' },
'input[name="newPassword"], input[placeholder*="新密码"]': { value: 'NewPassword@123' },
'input[name="confirmPassword"], input[placeholder*="确认密码"]': { value: 'NewPassword@123' }
});
testLogger.endStep('步骤3: 填写密码修改表单', 'passed');
testLogger.startStep('步骤4: 提交修改');
await formHelper.submitForm('button[type="submit"], button:has-text("确认")');
testLogger.endStep('步骤4: 提交修改', 'passed');
testLogger.startStep('步骤5: 验证修改成功');
await assertionHelper.assertToastVisible(page, '密码修改成功提示应该显示');
await assertionHelper.assertModalHidden(page, '修改密码弹窗应该关闭');
testLogger.endStep('步骤5: 验证修改成功', 'passed');
await screenshotHelper.takeScreenshotOnSuccess('user-change-password');
});
});