kindergarten_java/reading-platform-frontend/tests/e2e/school/05-teachers.spec.ts
2026-03-26 10:21:34 +08:00

238 lines
8.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 学校端 E2E 测试 - 教师管理功能
*/
import { test, expect } from '@playwright/test';
import { loginAsSchool, clickSubMenu } from './helpers';
import { SCHOOL_CONFIG } from './fixtures';
test.describe('学校端教师管理功能', () => {
test.beforeEach(async ({ page }) => {
await loginAsSchool(page);
});
test('测试 1: 访问教师管理页面', async ({ page }) => {
// 1. 点击人员管理 → 教师管理
await clickSubMenu(page, '人员管理', '教师管理');
await page.waitForURL('**/school/teachers*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 验证页面标题(使用 first 避免 strict mode violation
await expect(page.getByRole('heading', { name: '教师管理' }).first()).toBeVisible({ timeout: 5000 });
// 3. 验证表格加载
const tableExists = await page.locator('table, .ant-table').count() > 0;
test.info().annotations.push({
type: 'info',
description: `教师表格:${tableExists ? '存在' : '不存在'}`,
});
// 截图
await page.screenshot({ path: 'test-results/school-teachers-list.png' });
});
test('测试 2: 创建教师', async ({ page }) => {
test.slow();
// 1. 进入教师管理页面
await clickSubMenu(page, '人员管理', '教师管理');
await page.waitForURL('**/school/teachers*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 点击新建按钮
const createBtn = page.locator('button:has-text("新建")').or(page.locator('button:has-text("创建")')).or(page.locator('button:has-text("新增")'));
if (await createBtn.count() > 0) {
await createBtn.first().click();
await page.waitForTimeout(500);
// 3. 验证弹窗显示
await expect(page.locator('.ant-modal')).toBeVisible({ timeout: 5000 });
// 4. 填写教师信息
const teacherName = `测试教师_${Date.now()}`;
const teacherAccount = `teacher_test_${Date.now()}`;
const nameInput = page.locator('input[placeholder*="教师姓名"]').or(page.locator('input[formitemlabel*="姓名"]'));
if (await nameInput.count() > 0) {
await nameInput.first().fill(` ${teacherName} `);
}
const accountInput = page.locator('input[placeholder*="账号"]').or(page.locator('input[formitemlabel*="账号"]'));
if (await accountInput.count() > 0) {
await accountInput.first().fill(` ${teacherAccount} `);
}
const passwordInput = page.locator('input[placeholder*="密码"]').or(page.locator('input[type="password"]'));
if (await passwordInput.count() > 0) {
await passwordInput.first().fill('123456');
}
// 5. 点击确定按钮
const okBtn = page.locator('button:has-text("确定")').or(page.locator('button:has-text("确认")')).or(page.locator('button:has-text("保存")'));
if (await okBtn.count() > 0) {
await okBtn.first().click();
await page.waitForTimeout(2000);
// 6. 验证创建成功
const successMsg = await page.locator('.ant-message-success').count() > 0;
test.info().annotations.push({
type: successMsg ? 'success' : 'info',
description: `创建教师:${successMsg ? '成功' : '完成'}`,
});
}
} else {
test.info().annotations.push({
type: 'warning',
description: '未找到新建教师按钮',
});
}
});
test('测试 3: 查看教师详情', async ({ page }) => {
// 1. 进入教师管理页面
await clickSubMenu(page, '人员管理', '教师管理');
await page.waitForURL('**/school/teachers*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 查找查看按钮
const viewBtn = page.locator('button:has-text("查看")').or(page.locator('a:has-text("查看")')).first();
if (await viewBtn.count() > 0) {
await viewBtn.click();
await page.waitForTimeout(2000);
// 3. 验证详情显示
const modalExists = await page.locator('.ant-modal').count() > 0;
test.info().annotations.push({
type: 'info',
description: `教师详情:${modalExists ? '弹窗显示' : '页面显示'}`,
});
} else {
test.info().annotations.push({
type: 'warning',
description: '未找到查看按钮',
});
}
});
test('测试 4: 编辑教师', async ({ page }) => {
test.slow();
// 1. 进入教师管理页面
await clickSubMenu(page, '人员管理', '教师管理');
await page.waitForURL('**/school/teachers*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 查找编辑按钮
const editBtn = page.locator('button:has-text("编辑")').first();
if (await editBtn.count() > 0) {
await editBtn.click();
await page.waitForTimeout(1000);
// 3. 验证弹窗显示
await expect(page.locator('.ant-modal')).toBeVisible({ timeout: 5000 });
// 4. 保存修改
const saveBtn = page.locator('button:has-text("确定")').or(page.locator('button:has-text("保存")'));
if (await saveBtn.count() > 0) {
await saveBtn.first().click();
await page.waitForTimeout(2000);
const successMsg = await page.locator('.ant-message-success').count() > 0;
test.info().annotations.push({
type: successMsg ? 'success' : 'info',
description: `编辑教师:${successMsg ? '成功' : '完成'}`,
});
}
} else {
test.info().annotations.push({
type: 'warning',
description: '未找到编辑按钮',
});
}
});
test('测试 5: 教师筛选功能', async ({ page }) => {
// 1. 进入教师管理页面
await clickSubMenu(page, '人员管理', '教师管理');
await page.waitForURL('**/school/teachers*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 查找筛选器
const searchInput = page.locator('input[placeholder*="搜索"]').or(page.locator('input[placeholder*="教师姓名"]'));
if (await searchInput.count() > 0) {
await searchInput.first().fill('测试');
await page.waitForTimeout(1000);
test.info().annotations.push({
type: 'success',
description: '筛选功能:可用',
});
}
// 截图
await page.screenshot({ path: 'test-results/school-teachers-filter.png' });
});
test('测试 6: 删除教师', async ({ page }) => {
test.slow();
// 1. 进入教师管理页面
await clickSubMenu(page, '人员管理', '教师管理');
await page.waitForURL('**/school/teachers*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 查找删除按钮
const deleteBtn = page.locator('button:has-text("删除")').first();
if (await deleteBtn.count() > 0) {
await deleteBtn.click();
await page.waitForTimeout(500);
// 3. 确认删除
const confirmBtn = page.locator('button:has-text("确定")').or(page.locator('button:has-text("确认")'));
if (await confirmBtn.count() > 0) {
await confirmBtn.first().click();
await page.waitForTimeout(2000);
test.info().annotations.push({
type: 'success',
description: '删除教师:操作完成',
});
}
} else {
test.info().annotations.push({
type: 'warning',
description: '未找到删除按钮',
});
}
});
test('测试 7: 分配班级', async ({ page }) => {
test.slow();
// 1. 进入教师管理页面
await clickSubMenu(page, '人员管理', '教师管理');
await page.waitForURL('**/school/teachers*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 查找分配班级按钮
const assignBtn = page.locator('button:has-text("分配班级")').or(page.locator('button:has-text("绑定班级")')).first();
if (await assignBtn.count() > 0) {
await assignBtn.click();
await page.waitForTimeout(1000);
// 3. 验证弹窗显示
await expect(page.locator('.ant-modal')).toBeVisible({ timeout: 5000 });
test.info().annotations.push({
type: 'success',
description: '分配班级功能:可用',
});
} else {
test.info().annotations.push({
type: 'warning',
description: '未找到分配班级按钮',
});
}
});
});