08ea5fbe98
添加用户管理视图、API和状态管理文件
249 lines
9.0 KiB
TypeScript
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');
|
|
});
|
|
});
|