115 lines
2.8 KiB
JavaScript
115 lines
2.8 KiB
JavaScript
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<string>}
|
|
*/
|
|
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;
|