129 lines
4.0 KiB
TypeScript
129 lines
4.0 KiB
TypeScript
/**
|
|
* 教师端 E2E 测试 - 学生管理
|
|
*/
|
|
|
|
import { test, expect } from '@playwright/test';
|
|
import { loginAsTeacher, clickSubMenu, waitForTable } from './helpers';
|
|
|
|
test.describe('教师端学生管理功能', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await loginAsTeacher(page);
|
|
});
|
|
|
|
test('验证学生列表页面加载', async ({ page }) => {
|
|
// 导航到学生管理页面
|
|
await clickSubMenu(page, '学生管理', '学生列表');
|
|
|
|
// 等待页面加载
|
|
await page.waitForTimeout(2000);
|
|
|
|
// 验证页面标题
|
|
const hasTitle = await page.getByText(/学生 | 幼儿管理 | 我的学生/).count() > 0;
|
|
test.info().annotations.push({
|
|
type: hasTitle ? 'success' : 'warning',
|
|
description: `学生管理标题:${hasTitle ? '存在' : '不存在'}`,
|
|
});
|
|
});
|
|
|
|
test('验证学生数据加载', async ({ page }) => {
|
|
// 导航到学生管理页面
|
|
await clickSubMenu(page, '学生管理', '学生列表');
|
|
|
|
// 等待页面加载
|
|
await page.waitForTimeout(3000);
|
|
|
|
// 检查是否有学生数据
|
|
const hasStudentList = await page.locator('[class*="student"], table').count() > 0;
|
|
const hasEmpty = await page.getByText(/暂无数据 | 暂无学生/).count() > 0;
|
|
|
|
test.info().annotations.push({
|
|
type: 'info',
|
|
description: `学生数据:${hasStudentList ? '存在' : hasEmpty ? '空状态' : '未知'}`,
|
|
});
|
|
});
|
|
|
|
test('验证学生筛选功能', async ({ page }) => {
|
|
// 导航到学生管理页面
|
|
await clickSubMenu(page, '学生管理', '学生列表');
|
|
|
|
// 等待页面加载
|
|
await page.waitForTimeout(2000);
|
|
|
|
// 查找筛选器
|
|
const hasFilter = await page.locator('[class*="filter"], [class*="search"], .ant-input, .ant-select').count() > 0;
|
|
test.info().annotations.push({
|
|
type: 'info',
|
|
description: `筛选功能:${hasFilter ? '存在' : '不存在'}`,
|
|
});
|
|
|
|
// 查找班级筛选
|
|
const hasClassFilter = await page.getByText(/班级 | 全部班级/).count() > 0;
|
|
test.info().annotations.push({
|
|
type: 'info',
|
|
description: `班级筛选:${hasClassFilter ? '存在' : '不存在'}`,
|
|
});
|
|
});
|
|
|
|
test('验证学生详情查看', async ({ page }) => {
|
|
// 导航到学生管理页面
|
|
await clickSubMenu(page, '学生管理', '学生列表');
|
|
|
|
// 等待页面加载
|
|
await page.waitForTimeout(3000);
|
|
|
|
// 查找第一个学生记录
|
|
const firstStudent = page.locator('table tbody tr').first();
|
|
const hasStudent = await firstStudent.count() > 0;
|
|
|
|
if (hasStudent) {
|
|
// 查找查看按钮
|
|
const viewBtn = page.getByRole('button', { name: /查看 | 详情/ }).first();
|
|
const hasViewBtn = await viewBtn.count() > 0;
|
|
|
|
test.info().annotations.push({
|
|
type: 'info',
|
|
description: `查看详情按钮:${hasViewBtn ? '存在' : '不存在'}`,
|
|
});
|
|
}
|
|
});
|
|
|
|
test('验证学生信息完整性', async ({ page }) => {
|
|
// 导航到学生管理页面
|
|
await clickSubMenu(page, '学生管理', '学生列表');
|
|
|
|
// 等待页面加载
|
|
await page.waitForTimeout(3000);
|
|
|
|
// 检查表格列头
|
|
const headers = page.locator('thead th');
|
|
const headerCount = await headers.count();
|
|
|
|
test.info().annotations.push({
|
|
type: 'info',
|
|
description: `表格列数:${headerCount}`,
|
|
});
|
|
|
|
// 检查是否有姓名列
|
|
const hasNameColumn = await page.getByText(/姓名 | 学生姓名/).count() > 0;
|
|
test.info().annotations.push({
|
|
type: 'info',
|
|
description: `姓名显示:${hasNameColumn ? '存在' : '不存在'}`,
|
|
});
|
|
});
|
|
|
|
test('截图保存学生管理状态', async ({ page }) => {
|
|
// 导航到学生管理页面
|
|
await clickSubMenu(page, '学生管理', '学生列表');
|
|
|
|
// 等待页面完全加载
|
|
await page.waitForTimeout(3000);
|
|
|
|
// 截图
|
|
await page.screenshot({ path: 'test-results/teacher-students.png' });
|
|
test.info().annotations.push({
|
|
type: 'success',
|
|
description: '学生管理截图已保存',
|
|
});
|
|
});
|
|
});
|