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

239 lines
8.2 KiB
TypeScript

/**
* 学校端 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/parents*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 验证页面标题
await expect(page.locator('text=家长管理').or(page.locator('text=家长列表')).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-parents-list.png' });
});
test('测试 2: 创建家长', async ({ page }) => {
test.slow();
// 1. 进入家长管理页面
await clickSubMenu(page, '人员管理', '家长管理');
await page.waitForURL('**/school/parents*', { 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 parentName = `测试家长_${Date.now()}`;
const parentPhone = `138${Date.now().toString().substring(5)}`;
const parentAccount = `parent_test_${Date.now()}`;
const nameInput = page.locator('input[placeholder*="家长姓名"]').or(page.locator('input[formitemlabel*="姓名"]'));
if (await nameInput.count() > 0) {
await nameInput.first().fill(` ${parentName} `);
}
const phoneInput = page.locator('input[placeholder*="手机号"]').or(page.locator('input[formitemlabel*="手机"]'));
if (await phoneInput.count() > 0) {
await phoneInput.first().fill(` ${parentPhone} `);
}
const accountInput = page.locator('input[placeholder*="账号"]').or(page.locator('input[formitemlabel*="账号"]'));
if (await accountInput.count() > 0) {
await accountInput.first().fill(` ${parentAccount} `);
}
// 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/parents*', { 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/parents*', { 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/parents*', { 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-parents-filter.png' });
});
test('测试 6: 删除家长', async ({ page }) => {
test.slow();
// 1. 进入家长管理页面
await clickSubMenu(page, '人员管理', '家长管理');
await page.waitForURL('**/school/parents*', { 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/parents*', { timeout: 10000 });
await page.waitForTimeout(1000);
// 2. 查找绑定幼儿按钮
const bindBtn = page.locator('button:has-text("绑定幼儿")').or(page.locator('button:has-text("关联幼儿")')).first();
if (await bindBtn.count() > 0) {
await bindBtn.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: '未找到绑定幼儿按钮',
});
}
});
});