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'); }); });