Files
E2E-Test/文书管理-refactored.spec.ts
2025-11-04 16:29:07 +08:00

213 lines
6.9 KiB
TypeScript

/**
* 文书管理测试 - 重构版本
* 采用 Page Object Model 设计模式,提高代码可维护性和可读性
*/
import { test } from '@playwright/test';
import { TestConfig } from './config/test.config';
import { ErrorHandler } from './utils/error-handler';
import { LoginPage } from './pages/LoginPage';
import { DreamiExplorePage } from './pages/DreamiExplorePage';
import { StudentPage } from './pages/StudentPage';
import { EssayWritingPage } from './pages/EssayWritingPage';
test('文书管理完整流程测试', async ({ page }) => {
// 设置测试超时时间
test.setTimeout(TestConfig.timeouts.test);
// 初始化错误处理器
const errorHandler = new ErrorHandler(TestConfig.credentials);
// 初始化页面对象
const loginPage = new LoginPage(page);
const dreamiExplorePage = new DreamiExplorePage(page);
const studentPage = new StudentPage(page);
const essayWritingPage = new EssayWritingPage(page);
// 辅助函数:执行步骤并捕获错误
const executeStep = async (stepName: string, stepFunction: () => Promise<void>) => {
await errorHandler.executeStep(stepName, stepFunction, page);
};
// ========== 登录流程 ==========
await executeStep('访问首页', async () => {
await loginPage.visitHomePage();
});
await executeStep('点击登录按钮', async () => {
await loginPage.clickLoginButton();
});
await executeStep('输入登录信息', async () => {
await loginPage.login(TestConfig.credentials.email, TestConfig.credentials.password);
});
// ========== DreamiExplore 测试 ==========
await executeStep('进入 DreamiExplore', async () => {
await dreamiExplorePage.enterDreamiExplore();
});
await executeStep('测试聊天功能', async () => {
await dreamiExplorePage.testChatFunction();
});
// ========== 学生管理流程 ==========
await executeStep('返回学生工作台', async () => {
await studentPage.goToStudentWorkbench();
});
await executeStep('创建新学生', async () => {
await studentPage.createNewStudent(TestConfig.testData.student);
});
// ========== Essay Writing 第一轮流程 ==========
await executeStep('进入 Essay Writing', async () => {
await essayWritingPage.enterEssayWriting();
});
await executeStep('添加材料', async () => {
await essayWritingPage.addMaterial(
TestConfig.testData.material.title,
TestConfig.testData.material.content,
TestConfig.testData.material.expectedButtonText
);
});
await executeStep('探索 Essay Idea', async () => {
await essayWritingPage.exploreEssayIdea();
});
await executeStep('加载 Recommendation', async () => {
await essayWritingPage.loadRecommendation();
});
await executeStep('生成 Essay Idea', async () => {
await essayWritingPage.generateEssayIdea();
});
await executeStep('生成 Essay', async () => {
await essayWritingPage.generateEssay();
});
// ========== 各种检查功能 ==========
await executeStep('语法检查 (Grammar Check)', async () => {
await essayWritingPage.performGrammarCheck();
});
await executeStep('查重检查 (Plagiarism Check)', async () => {
await essayWritingPage.performPlagiarismCheck();
});
await executeStep('AI检测 (AI Detection)', async () => {
await essayWritingPage.performAIDetection();
});
await executeStep('人性化处理 (Humanize)', async () => {
await essayWritingPage.performHumanize();
});
await executeStep('润色 (Polish)', async () => {
await essayWritingPage.performPolish();
});
await executeStep('评分 (Get Rated)', async () => {
await essayWritingPage.performGetRated();
});
await executeStep('Improvement 检查', async () => {
await essayWritingPage.performImprovementCheck();
});
// ========== Essay Writing 第二轮流程 ==========
await executeStep('返回 Essay Writing', async () => {
await essayWritingPage.returnToEssayWriting();
});
await executeStep('再次探索 Essay Idea', async () => {
await essayWritingPage.exploreEssayIdea();
});
await executeStep('再次加载 Recommendation', async () => {
await page.getByRole('button', { name: 'icon Recommendation' }).click();
console.log('等待 Recommendation 加载完成...');
await page.waitForTimeout(10000);
console.log('Recommendation 加载完成');
});
await executeStep('再次生成 Essay Idea', async () => {
await page.getByRole('button', { name: 'icon Generate Essay Idea' }).click();
await page.getByRole('button', { name: 'Generate' }).click();
console.log('等待 Essay Idea 生成...');
await page.waitForTimeout(60000);
console.log('Essay Idea 生成完成');
});
await page.waitForTimeout(10000);
// ========== Student Guide 测试 ==========
await executeStep('测试 Student Guide 展开/收起', async () => {
await page.getByRole('button', { name: 'Student Guide' }).click();
console.log('等待 Student Guide 加载完成...');
await page.waitForTimeout(110000);
await page.getByRole('button', { name: 'Copy' }).click();
await page.waitForTimeout(5000);
await page.getByLabel('Student Guide').getByRole('button').filter({ hasText: /^$/ }).click();
await page.waitForTimeout(10000);
});
// ========== 翻译和复制测试 ==========
await executeStep('测试翻译功能', async () => {
await page.getByRole('button', { name: 'Translate Translate' }).click();
await page.waitForTimeout(3000);
});
await executeStep('测试复制到剪贴板', async () => {
await page.getByRole('button', { name: 'Copy' }).click();
await page.waitForTimeout(5000);
await page.waitForTimeout(10000);
});
await executeStep('测试翻译返回英文', async () => {
await page.getByRole('button', { name: 'Translate Translate' }).click();
await page.waitForTimeout(2000);
});
await executeStep('再次测试复制功能', async () => {
await page.getByRole('button', { name: 'Copy' }).click();
await page.waitForTimeout(5000);
});
// ========== 重新生成测试 ==========
await executeStep('测试重新生成 Essay Idea', async () => {
await page.getByRole('button', { name: 'Regenerate' }).click();
console.log('等待重新生成 Essay Idea...');
await page.waitForTimeout(60000);
console.log('重新生成完成');
});
// ========== Outline 和 Draft 生成 ==========
await executeStep('生成 Outline', async () => {
await essayWritingPage.generateOutline();
});
await executeStep('生成 Draft', async () => {
await essayWritingPage.generateDraft(
TestConfig.testData.draft.level,
TestConfig.testData.draft.length
);
});
// ========== 生成测试报告 ==========
errorHandler.printSummary();
if (errorHandler.hasErrors()) {
const reportPath = errorHandler.generateErrorReport(
TestConfig.report.directory,
TestConfig.report.filePrefix
);
console.log(`📄 详细错误报告已保存到: ${reportPath}`);
}
});