/** * 教师端 E2E 测试 - 登录 */ import { test, expect } from '@playwright/test'; import { TEACHER_CONFIG } from './fixtures'; test.describe('教师端登录功能', () => { test('验证登录页面加载', async ({ page }) => { await page.goto('/login'); // 验证页面标题 await expect(page).toHaveTitle(/幼儿阅读教学服务平台/); // 验证角色选择按钮存在 await expect(page.locator('.role-btn')).toBeVisible(); // 验证教师角色按钮存在 const teacherBtn = page.locator('.role-btn').filter({ hasText: '教师' }); await expect(teacherBtn).toBeVisible(); }); test('使用正确账号密码登录', async ({ page }) => { await page.goto('/login'); // 点击教师角色按钮 await page.locator('.role-btn').filter({ hasText: '教师' }).first().click(); // 输入账号密码 await page.getByPlaceholder('请输入账号').fill(TEACHER_CONFIG.account); await page.getByPlaceholder('请输入密码').fill(TEACHER_CONFIG.password); // 点击登录按钮 await page.locator('.login-btn').click(); // 等待登录按钮消失 await page.locator('.login-btn').waitFor({ state: 'hidden', timeout: 10000 }); // 等待页面跳转 await page.waitForURL(/teacher/, { timeout: 10000 }); // 验证跳转到教师端首页 await expect(page).toHaveURL(/.*teacher.*/); }); test('使用错误密码登录', async ({ page }) => { await page.goto('/login'); // 点击教师角色按钮 await page.locator('.role-btn').filter({ hasText: '教师' }).first().click(); // 输入账号和错误密码 await page.getByPlaceholder('请输入账号').fill(TEACHER_CONFIG.account); await page.getByPlaceholder('请输入密码').fill('wrongpassword'); // 点击登录按钮 await page.locator('.login-btn').click(); // 等待错误提示 await page.waitForSelector('.ant-message-error, [class*="error"]', { timeout: 5000 }).catch(() => {}); // 验证仍在登录页 await expect(page).toHaveURL(/.*login.*/); }); test('登录表单验证', async ({ page }) => { await page.goto('/login'); // 点击教师角色按钮 await page.locator('.role-btn').filter({ hasText: '教师' }).first().click(); // 不输入账号密码直接点击登录 await page.locator('.login-btn').click(); // 等待验证提示 await page.waitForTimeout(1000); // 验证是否显示验证错误提示 const hasError = await page.locator('.ant-message-error, .ant-form-item-explain-error').count() > 0; test.info().annotations.push({ type: 'info', description: `表单验证提示:${hasError ? '存在' : '不存在'}`, }); }); });