/** * P0 - 冒烟测试: 启动小程序 → 首页加载 → TabBar 导航切换 * * 前置条件: * - 微信开发者工具已打开,CLI 端口 45869 * - 后端服务 http://192.168.110.64:8084 已启动 * - 小程序已编译到 unpackage/dist/dev/mp-weixin */ const { launchMiniProgram, connectMiniProgram, waitForPage, screenshot, switchTab, generateTestId } = require('../helpers/automator'); const HomePage = require('../pages/HomePage'); const SearchPage = require('../pages/SearchPage'); const MyCoursesPage = require('../pages/MyCoursesPage'); const ProfilePage = require('../pages/ProfilePage'); let miniProgram; const TEST_ID = generateTestId(); describe('P0 - 冒烟测试', () => { beforeAll(async () => { console.log(`[P0] 测试 ID: ${TEST_ID}`); try { miniProgram = await connectMiniProgram(); console.log('[P0] 已连接小程序'); } catch (e) { console.log('[P0] 连接失败,尝试启动小程序...'); miniProgram = await launchMiniProgram(); } // 等待小程序完全启动 await miniProgram.waitFor(3000); }, 60000); afterAll(async () => { if (miniProgram) { await screenshot(miniProgram, 'member_smoke_final'); // 不要在这里关闭,留给 global-teardown 处理 global.__MINI_PROGRAM__ = miniProgram; } }); test('TC-SMOKE-001: 小程序启动并显示首页', async () => { const page = await miniProgram.currentPage(); console.log(`[TC-SMOKE-001] 当前页面: ${page.path}`); // 小程序启动后可能显示登录页或首页 // 如果当前是登录页,尝试跳转到首页 if (page.path && page.path.includes('login')) { console.log('[TC-SMOKE-001] 当前在登录页,尝试跳过...'); try { // 尝试通过 reLaunch 跳转到首页 await miniProgram.reLaunch('/pages/index/index'); await miniProgram.waitFor(2000); } catch (e) { console.warn('[TC-SMOKE-001] reLaunch 失败:', e.message); } } const homePage = new HomePage(miniProgram); const currentPage = await miniProgram.currentPage(); console.log(`[TC-SMOKE-001] 最终页面: ${currentPage.path}`); // 验证页面已加载 expect(currentPage.path).toBeTruthy(); }); test('TC-SMOKE-002: 首页加载并包含关键元素', async () => { let page; try { page = await waitForPage(miniProgram, 'pages/index/index'); } catch (e) { // 如果不在首页,尝试切换 console.log('[TC-SMOKE-002] 切换到首页 Tab...'); await switchTab(miniProgram, 0); page = await waitForPage(miniProgram, 'pages/index/index'); } expect(page).toBeTruthy(); expect(page.path).toContain('pages/index/index'); const homePage = new HomePage(miniProgram); const elements = await homePage.getElements(); console.log(`[TC-SMOKE-002] 首页元素: 轮播图=${elements.bannerCount}, 课程卡片=${elements.courseCardCount}, 导航按钮=${elements.navButtonCount}`); await screenshot(miniProgram, 'member_smoke_home'); }); test('TC-SMOKE-003: TabBar 导航到课程搜索页', async () => { await switchTab(miniProgram, 1); // 课程 Tab const page = await waitForPage(miniProgram, 'pages/search/search', 15000); expect(page).toBeTruthy(); expect(page.path).toContain('pages/search/search'); const searchPage = new SearchPage(miniProgram); await screenshot(miniProgram, 'member_smoke_search'); }); test('TC-SMOKE-004: TabBar 导航到我的课程页', async () => { await switchTab(miniProgram, 2); // 我的课程 Tab const page = await waitForPage(miniProgram, 'pages/my-courses/my-courses', 15000); expect(page).toBeTruthy(); expect(page.path).toContain('pages/my-courses/my-courses'); await screenshot(miniProgram, 'member_smoke_my_courses'); }); test('TC-SMOKE-005: TabBar 导航到个人中心页', async () => { await switchTab(miniProgram, 3); // 我的 Tab const page = await waitForPage(miniProgram, 'pages/profile/profile', 15000); expect(page).toBeTruthy(); expect(page.path).toContain('pages/profile/profile'); await screenshot(miniProgram, 'member_smoke_profile'); }); test('TC-SMOKE-006: 从个人中心返回首页', async () => { await switchTab(miniProgram, 0); // 首页 Tab const page = await waitForPage(miniProgram, 'pages/index/index', 15000); expect(page).toBeTruthy(); expect(page.path).toContain('pages/index/index'); console.log('[TC-SMOKE-006] TabBar 导航切换全部完成'); }); });