/** * 学校端 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/tasks*', { 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-tasks-list.png' }); }); test('测试 2: 创建任务', async ({ page }) => { test.slow(); // 1. 进入任务管理页面 await clickSubMenu(page, '教学管理', '阅读任务'); await page.waitForURL('**/school/tasks*', { 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 taskTitle = `测试任务_${Date.now()}`; const titleInput = page.locator('input[placeholder*="任务标题"]').or(page.locator('input[formitemlabel*="标题"]')); if (await titleInput.count() > 0) { await titleInput.first().fill(taskTitle); } // 选择任务类型 const typeSelect = page.locator('.ant-select').filter({ hasText: /任务类型/i }).first(); if (await typeSelect.count() > 0) { await typeSelect.click(); await page.keyboard.press('ArrowDown'); await page.keyboard.press('Enter'); } // 选择截止日期 const deadlineInput = page.locator('input[placeholder*="截止日期"]').or(page.locator('input[formitemlabel*="截止日期"]')); if (await deadlineInput.count() > 0) { await deadlineInput.first().fill('2026-03-25'); } // 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/tasks*', { 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/tasks*', { 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/tasks*', { 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-tasks-filter.png' }); }); test('测试 6: 删除任务', async ({ page }) => { test.slow(); // 1. 进入任务管理页面 await clickSubMenu(page, '教学管理', '阅读任务'); await page.waitForURL('**/school/tasks*', { 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/tasks*', { timeout: 10000 }); await page.waitForTimeout(1000); // 2. 查找发布按钮 const publishBtn = page.locator('button:has-text("发布")').or(page.locator('button:has-text("下发")')).first(); if (await publishBtn.count() > 0) { await publishBtn.click(); await page.waitForTimeout(1000); // 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: '未找到发布按钮', }); } }); });