前后端目录重命名: - 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 文档中的路径引用
104 lines
3.6 KiB
TypeScript
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();
|
|
});
|
|
});
|