const { launchMiniProgram, closeMiniProgram, sleep } = require('../helpers/automator'); const LoginPage = require('../pages/LoginPage'); const HomePage = require('../pages/HomePage'); const CourseListPage = require('../pages/CourseListPage'); const CourseDetailPage = require('../pages/CourseDetailPage'); let miniProgram; let loginPage; let homePage; let courseListPage; let courseDetailPage; describe('P1 - 教练课程工作流测试', () => { beforeAll(async () => { miniProgram = await launchMiniProgram(); loginPage = new LoginPage(miniProgram); homePage = new HomePage(miniProgram); courseListPage = new CourseListPage(miniProgram); courseDetailPage = new CourseDetailPage(miniProgram); // 先完成登录 await loginPage.login('coach_test1', 'Test@123'); await loginPage.waitForLoginSuccess(20000); await homePage.waitForLoad(); }, 120000); afterAll(async () => { await closeMiniProgram(); }, 30000); test('从首页导航到课程列表页', async () => { await homePage.navigateToCourseList(); const page = await miniProgram.currentPage(); expect(page.path).toContain('pages/course-list/course-list'); await courseListPage.waitForLoad(); }, 30000); test('课程列表页应显示筛选项', async () => { const page = await miniProgram.currentPage(); // 验证 Tab 筛选栏存在 const tabs = await page.$$('.tab-item'); expect(tabs.length).toBeGreaterThanOrEqual(4); // 验证 Tab 标签内容 const tabLabels = []; for (const tab of tabs) { const textEl = await tab.$('text'); tabLabels.push(textEl ? (await textEl.text()).trim() : ''); } expect(tabLabels).toContain('全部'); expect(tabLabels).toContain('待开课'); expect(tabLabels).toContain('进行中'); expect(tabLabels).toContain('已结束'); }, 15000); test('按状态筛选 → 待开课,应显示正确结果', async () => { await courseListPage.filterByStatus('pending'); const page = await miniProgram.currentPage(); // 验证 active Tab const activeTab = await page.$('.tab-item.active text'); expect(activeTab).not.toBeNull(); const activeLabel = await activeTab.text(); expect(activeLabel.trim()).toBe('待开课'); // 获取筛选结果并验证状态标签 const courses = await courseListPage.getCourseList(); for (const course of courses) { // 待开课状态下所有课程的状态应为"正常" expect(course.status).toBe('正常'); } }, 20000); test('按状态筛选 → 全部,应显示所有课程', async () => { await courseListPage.filterByStatus('all'); const page = await miniProgram.currentPage(); const activeTab = await page.$('.tab-item.active text'); expect(activeTab).not.toBeNull(); const activeLabel = await activeTab.text(); expect(activeLabel.trim()).toBe('全部'); // 确保页面渲染完成 await sleep(1000); }, 20000); test('点击课程 → 进入课程详情页', async () => { // 先切换到全部视图确保有数据 await courseListPage.filterByStatus('all'); await sleep(1000); const count = await courseListPage.getCourseCount(); if (count === 0) { console.warn('[WARN] 没有课程数据,跳过课程详情测试'); return; } // 点击第一个课程 await courseListPage.clickCourse(0); const page = await miniProgram.currentPage(); expect(page.path).toContain('pages/course-detail/course-detail'); await courseDetailPage.waitForLoad(); }, 30000); test('课程详情页应显示课程信息', async () => { const page = await miniProgram.currentPage(); // 确认当前在课程详情页 if (!page.path.includes('pages/course-detail')) { // 如果不在详情页,尝试导航到第一个课程 await homePage.navigateToCourseList(); await sleep(1000); const count = await courseListPage.getCourseCount(); if (count === 0) { console.warn('[WARN] 没有课程数据,跳过课程详情测试'); return; } await courseListPage.clickCourse(0); await courseDetailPage.waitForLoad(); } const info = await courseDetailPage.getCourseInfo(); // 课程名应存在 expect(info.courseName).toBeTruthy(); // 时间应存在 expect(info.time).toBeTruthy(); }, 20000); test('课程详情页应显示学员人数信息', async () => { const page = await miniProgram.currentPage(); if (!page.path.includes('pages/course-detail')) { console.warn('[WARN] 不在课程详情页,跳过'); return; } const studentInfo = await courseDetailPage.getStudentList(); expect(studentInfo).toBeDefined(); expect(typeof studentInfo.count).toBe('number'); expect(typeof studentInfo.max).toBe('number'); }, 15000); });