/** * 测试文件: 阶段1-登录与注册 * 路径: 路径1-正常登录 * * 路径分析: * - POM: LoginPage, MainPage * - Mock: mockLoginSuccess() * - 规格: * ✓ 用户名输入框可见 * ✓ 密码输入框可见 * ✓ 登录按钮可见 * ✓ 登录成功提示显示 * ✓ 跳转到主界面 * - 需要新建: 无 * - 需要添加: 无 * - 已有的data-testid: * - login-username-input - 用户名输入框 * - login-password-input - 密码输入框 * - login-submit-button - 登录按钮 * - patient_management, register, worklist - MainPage导航按钮 */ import { mockLoginSuccess } from '../../support/mock/handlers/user'; import LoginPage from '../../support/pageObjects/LoginPage'; import MainPage from '../../support/pageObjects/MainPage'; describe('阶段1:登录与注册 - 路径1:正常登录', () => { const loginPage = new LoginPage(); const mainPage = new MainPage(); beforeEach(() => { // 设置Mock API mockLoginSuccess(); }); it('应该成功登录并进入主界面', () => { /** * Given: 用户在登录页面 * 步骤1: 打开登录界面 */ loginPage.visit(); // 验证登录页面元素可见 // 步骤2-4的前置条件:验证输入框和按钮可见 loginPage.getUsernameInput().should('be.visible'); loginPage.getPasswordInput().should('be.visible'); loginPage.getSubmitButton().should('be.visible'); /** * When: 用户输入正确的账号密码并点击登录 * 步骤2: 输入账号 * 步骤3: 输入密码 * 步骤4: 点击登录 */ loginPage.login('admin', '123456'); /** * Then: 系统验证账号密码 * 步骤5: 系统验证账号密码 */ // 等待登录API响应 cy.wait('@loginSuccess').then((interception) => { // 验证API响应 expect(interception.response?.statusCode).to.eq(200); expect(interception.response?.body.code).to.eq('0x000000'); expect(interception.response?.body.data.name).to.eq('admin'); }); /** * Then: 登录成功,显示成功提示,进入主界面 * 步骤6: 登录成功 → 进入主界面 */ // 验证登录成功提示显示 cy.contains('登录成功').should('be.visible', { timeout: 10000 }); // 验证进入主界面 - 患者管理按钮可见 cy.get('[data-testid="patient_management"]').should('be.visible'); }); });