/** * 文书管理测试 - 重构版本 * 采用 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) => { 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}`); } });