kindergarten_java/lesingle-edu-reading-platform-frontend/tests/e2e/schedule/schedule-real.spec.ts
En 40589f59e7 chore: 重命名项目目录
前后端目录重命名:
- reading-platform-java/ → lesingle-edu-reading-platform-backend/
- reading-platform-frontend/ → lesingle-edu-reading-platform-frontend/

更新相关文件:
- 所有 shell 脚本中的目录引用
- pom.xml 和 application.yml 中的项目名称
- package.json 中的项目名称
- .claude/CLAUDE.md 中的路径引用
- README 文档中的路径引用
2026-03-26 11:31:47 +08:00

104 lines
3.6 KiB
TypeScript

import { test, expect } from '@playwright/test';
/**
* 学校端排课功能实际测试
* 使用真实登录流程和等待策略
*/
const BASE_URL = 'http://localhost:5174';
test.describe('学校端排课功能 - 真实流程测试', () => {
test.beforeEach(async ({ page }) => {
// 每个测试前先登录
await page.goto(`${BASE_URL}/login`);
await page.waitForTimeout(2000);
// 先选择学校角色
await page.click('.role-btn:has-text("学校")');
await page.waitForTimeout(500);
// 填写登录表单
await page.fill('input[placeholder*="账号"]', 'school1');
await page.fill('input[placeholder*="密码"]', '123456');
// 点击登录按钮
await page.click('button:has-text("登录")');
// 等待登录成功
await page.waitForURL(/\/school/, { timeout: 15000 });
await page.waitForTimeout(2000);
});
test('应该能访问排课页面', async ({ page }) => {
// 通过侧边栏导航到排课页面
const scheduleLink = page.locator('a:has-text("课程排期"), .menu-item:has-text("课程排期")').first();
const count = await scheduleLink.count();
if (count > 0) {
await scheduleLink.click();
await page.waitForTimeout(2000);
} else {
// 直接访问URL
await page.goto(`${BASE_URL}/school/schedule`);
await page.waitForLoadState('networkidle', { timeout: 10000 });
}
// 截图
await page.screenshot({ path: 'screenshots/schedule-page.png' });
// 检查页面标题
const title = await page.locator('h1, h2, .page-header').first().textContent();
console.log('✅ 页面标题:', title);
});
test('应该能查看列表视图', async ({ page }) => {
await page.goto(`${BASE_URL}/school/schedule`);
await page.waitForLoadState('domcontentloaded', { timeout: 10000 });
await page.waitForTimeout(3000);
// 截图
await page.screenshot({ path: 'screenshots/schedule-list-view.png' });
// 检查是否有Tab
const tabs = page.locator('.ant-tabs-tab, [role="tab"]');
const tabCount = await tabs.count();
console.log(`✅ 找到 ${tabCount} 个Tab`);
// 检查是否有表格
const table = page.locator('.ant-table');
const hasTable = await table.count() > 0;
console.log(`✅ 有表格: ${hasTable}`);
});
test('应该能测试后端API', async ({ page }) => {
// 先登录获取token
await page.goto(`${BASE_URL}/login`);
await page.fill('input[placeholder*="账号"], input[name="username"]', 'school1');
await page.fill('input[placeholder*="密码"], input[name="password"]', '123456');
await page.click('button[type="submit"]');
await page.waitForURL(/\/school/, { timeout: 10000 });
// 从localStorage获取token
const token = await page.evaluate(() => localStorage.getItem('token'));
// 测试课程套餐API
const packagesResponse = await page.request.get(`${BASE_URL}/api/v1/school/packages`, {
headers: { 'Authorization': `Bearer ${token}` }
});
console.log('✅ 课程套餐API状态:', packagesResponse.status());
expect(packagesResponse.ok()).toBeTruthy();
const packagesData = await packagesResponse.json();
console.log('✅ 课程套餐数据:', JSON.stringify(packagesData).substring(0, 200));
// 测试排课列表API
const schedulesResponse = await page.request.get(`${BASE_URL}/api/v1/school/schedules?pageNum=1&pageSize=10`, {
headers: { 'Authorization': `Bearer ${token}` }
});
console.log('✅ 排课列表API状态:', schedulesResponse.status());
expect(schedulesResponse.ok()).toBeTruthy();
});
});