141 lines
3.6 KiB
JavaScript
141 lines
3.6 KiB
JavaScript
/**
|
||
* SearchPage - 团课搜索页 Page Object
|
||
* 对应页面: pages/search/search
|
||
*/
|
||
class SearchPage {
|
||
constructor(miniProgram) {
|
||
this.mp = miniProgram;
|
||
}
|
||
|
||
/**
|
||
* 等待搜索页加载完成
|
||
*/
|
||
async waitForLoad() {
|
||
const { waitForPage } = require('../helpers/automator');
|
||
return waitForPage(this.mp, 'pages/search/search');
|
||
}
|
||
|
||
/**
|
||
* 输入搜索关键词
|
||
* @param {string} keyword - 搜索关键词
|
||
*/
|
||
async searchCourses(keyword) {
|
||
const page = await this.mp.currentPage();
|
||
console.log(`[SearchPage] 搜索课程: "${keyword}"`);
|
||
|
||
try {
|
||
// 查找搜索输入框并输入
|
||
const searchInput = await page.$('input');
|
||
if (searchInput) {
|
||
await searchInput.input(keyword);
|
||
}
|
||
|
||
// 查找搜索按钮并点击
|
||
const searchBtn = await page.$('.search-btn');
|
||
if (searchBtn) {
|
||
await searchBtn.tap();
|
||
}
|
||
} catch (e) {
|
||
console.warn('[SearchPage] 搜索操作异常:', e.message);
|
||
}
|
||
|
||
await this.mp.waitFor(1500);
|
||
}
|
||
|
||
/**
|
||
* 选择日期范围
|
||
* @param {string} start - 开始日期 YYYY-MM-DD
|
||
* @param {string} end - 结束日期 YYYY-MM-DD
|
||
*/
|
||
async selectDateRange(start, end) {
|
||
console.log(`[SearchPage] 选择日期范围: ${start} ~ ${end}`);
|
||
// 日期选择通常由 picker 组件实现,通过触发 change 事件模拟
|
||
const page = await this.mp.currentPage();
|
||
try {
|
||
const pickerElements = await page.$$('picker');
|
||
if (pickerElements && pickerElements.length >= 2) {
|
||
// 假设第一个是开始日期,第二个是结束日期
|
||
await pickerElements[0].tap();
|
||
await this.mp.waitFor(500);
|
||
await pickerElements[1].tap();
|
||
await this.mp.waitFor(500);
|
||
}
|
||
} catch (e) {
|
||
console.warn('[SearchPage] 日期选择异常:', e.message);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 选择时间段
|
||
* @param {string} value - 时间段值(如 'morning', 'afternoon', 'evening')
|
||
*/
|
||
async selectPeriod(value) {
|
||
console.log(`[SearchPage] 选择时间段: ${value}`);
|
||
const page = await this.mp.currentPage();
|
||
try {
|
||
const periodBtn = await page.$(`.period-${value}`);
|
||
if (periodBtn) {
|
||
await periodBtn.tap();
|
||
await this.mp.waitFor(1000);
|
||
}
|
||
} catch (e) {
|
||
console.warn('[SearchPage] 时间段选择异常:', e.message);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取课程列表
|
||
* @returns {Promise<Array>} 课程列表
|
||
*/
|
||
async getCourseList() {
|
||
const page = await this.mp.currentPage();
|
||
try {
|
||
const courseCards = await page.$$('.course-card');
|
||
if (!courseCards || courseCards.length === 0) {
|
||
return [];
|
||
}
|
||
return courseCards;
|
||
} catch (e) {
|
||
return [];
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取课程列表中的课程数量
|
||
* @returns {Promise<number>}
|
||
*/
|
||
async getCourseCount() {
|
||
const list = await this.getCourseList();
|
||
return list.length;
|
||
}
|
||
|
||
/**
|
||
* 点击指定索引的课程卡片
|
||
* @param {number} index - 课程索引(从0开始)
|
||
*/
|
||
async clickCourse(index = 0) {
|
||
const page = await this.mp.currentPage();
|
||
console.log(`[SearchPage] 点击第 ${index} 个课程`);
|
||
|
||
try {
|
||
const courseCards = await page.$$('.course-card');
|
||
if (courseCards && courseCards[index]) {
|
||
await courseCards[index].tap();
|
||
await this.mp.waitFor(1500);
|
||
}
|
||
} catch (e) {
|
||
console.warn('[SearchPage] 点击课程异常:', e.message);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 通过 TabBar 切换到首页
|
||
*/
|
||
async navigateToHome() {
|
||
const { switchTab } = require('../helpers/automator');
|
||
await switchTab(this.mp, 0);
|
||
}
|
||
}
|
||
|
||
module.exports = SearchPage;
|