const { sleep } = require('../helpers/automator'); class HomePage { /** * @param {object} miniProgram - miniprogram-automator 实例 */ constructor(miniProgram) { this.mp = miniProgram; } /** * 等待首页加载完成 */ async waitForLoad() { const page = await this.mp.currentPage(); await page.waitFor('.greeting-card', { timeout: 10000 }); await page.waitFor('.stats-card', { timeout: 5000 }); return page; } /** * 获取当前登录的教练名字 * @returns {Promise} */ async getCoachName() { const page = await this.mp.currentPage(); try { const nameEl = await page.$('.coach-name'); if (nameEl) { const text = await nameEl.text(); return (text || '').replace(' 教练', '').trim(); } } catch (e) { // 忽略 } return null; } /** * 获取今日统计信息(待开课、进行中、已结束) * @returns {Promise<{pending: string, inProgress: string, ended: string}>} */ async getTodayStats() { const page = await this.mp.currentPage(); try { const statNumbers = await page.$$('.stat-number'); const stats = {}; if (statNumbers.length >= 3) { stats.pending = (await statNumbers[0].text()).trim(); stats.inProgress = (await statNumbers[1].text()).trim(); stats.ended = (await statNumbers[2].text()).trim(); } return stats; } catch (e) { return { pending: '0', inProgress: '0', ended: '0' }; } } /** * 导航到课程列表页 */ async navigateToCourseList() { const page = await this.mp.currentPage(); // 点击"我的团课"入口卡片 const entryCards = await page.$$('.entry-card'); if (entryCards.length > 0) { await entryCards[0].tap(); } else { // 备用:通过 URL 导航 await this.mp.navigateTo('/pages/course-list/course-list'); } await sleep(2000); return this.mp.currentPage(); } /** * 导航到个人中心 */ async navigateToProfile() { const page = await this.mp.currentPage(); const entryCards = await page.$$('.entry-card'); if (entryCards.length >= 2) { await entryCards[1].tap(); } else { await this.mp.navigateTo('/pages/profile/profile'); } await sleep(2000); return this.mp.currentPage(); } /** * 验证首页关键元素存在 */ async verifyPageElements() { const page = await this.mp.currentPage(); const checks = {}; try { checks.greetingCard = !!(await page.$('.greeting-card')); } catch (e) { checks.greetingCard = false; } try { checks.statsCard = !!(await page.$('.stats-card')); } catch (e) { checks.statsCard = false; } try { checks.navTitle = !!(await page.$('.nav-title')); } catch (e) { checks.navTitle = false; } return checks; } } module.exports = HomePage;