Files
gym-manage/gym-manage-uniapp/e2e/specs/member-course-booking.spec.js
T

206 lines
6.5 KiB
JavaScript

/**
* P1 - 课程预约流程测试: 搜索团课 → 查看详情 → 预约课程 → 查看我的课程 → 取消预约
*
* 前置条件:
* - 微信开发者工具已打开,CLI 端口 45869
* - 后端服务 http://192.168.110.64:8084 已启动
* - 存在可预约的团课数据
*/
const {
launchMiniProgram,
connectMiniProgram,
waitForPage,
screenshot,
switchTab,
generateTestId
} = require('../helpers/automator');
const SearchPage = require('../pages/SearchPage');
const CourseDetailPage = require('../pages/CourseDetailPage');
const MyCoursesPage = require('../pages/MyCoursesPage');
let miniProgram;
const TEST_ID = generateTestId();
describe('P1 - 课程预约流程', () => {
beforeAll(async () => {
console.log(`[P1] 测试 ID: ${TEST_ID}`);
try {
miniProgram = await connectMiniProgram();
console.log('[P1] 已连接小程序');
} catch (e) {
console.log('[P1] 连接失败,尝试启动小程序...');
miniProgram = await launchMiniProgram();
}
await miniProgram.waitFor(3000);
// 先切换到首页(确保在小程序中)
try {
const page = await miniProgram.currentPage();
if (page.path && page.path.includes('login')) {
await miniProgram.reLaunch('/pages/index/index');
await miniProgram.waitFor(2000);
}
} catch (e) {
// ignore
}
}, 60000);
afterAll(async () => {
if (miniProgram) {
global.__MINI_PROGRAM__ = miniProgram;
}
});
test('TC-BOOK-001: 进入团课搜索页', async () => {
let page;
try {
page = await miniProgram.currentPage();
if (!page.path || !page.path.includes('search')) {
await switchTab(miniProgram, 1);
await miniProgram.waitFor(2000);
}
} catch (e) {
await switchTab(miniProgram, 1);
await miniProgram.waitFor(2000);
}
const searchPage = new SearchPage(miniProgram);
await searchPage.waitForLoad();
page = await miniProgram.currentPage();
expect(page.path).toContain('pages/search/search');
await screenshot(miniProgram, `member_booking_search_${TEST_ID}`);
});
test('TC-BOOK-002: 查看课程列表', async () => {
const searchPage = new SearchPage(miniProgram);
const courseCount = await searchPage.getCourseCount();
console.log(`[TC-BOOK-002] 课程列表数量: ${courseCount}`);
// 如果有课程,记录第一门课程信息
if (courseCount > 0) {
console.log('[TC-BOOK-002] 课程列表不为空,可以进行后续测试');
expect(courseCount).toBeGreaterThan(0);
} else {
// 课程列表为空时,记录警告但不失败(可能是测试环境数据问题)
console.warn('[TC-BOOK-002] 课程列表为空,后续预约测试可能无法完成');
// 尝试刷新
const page = await miniProgram.currentPage();
await miniProgram.callWxMethod('startPullDownRefresh', {});
await miniProgram.waitFor(2000);
const refreshedCount = await searchPage.getCourseCount();
console.log(`[TC-BOOK-002] 刷新后课程列表数量: ${refreshedCount}`);
}
});
test('TC-BOOK-003: 点击课程进入详情页', async () => {
const searchPage = new SearchPage(miniProgram);
const courseCount = await searchPage.getCourseCount();
if (courseCount === 0) {
console.warn('[TC-BOOK-003] 没有可点击的课程,跳过此测试');
return;
}
await searchPage.clickCourse(0);
// 等待详情页加载
const detailPage = new CourseDetailPage(miniProgram);
try {
await detailPage.waitForLoad();
} catch (e) {
// 可能导航方式不同,直接检查当前页
const page = await miniProgram.currentPage();
console.log(`[TC-BOOK-003] 当前页面: ${page.path}`);
}
const page = await miniProgram.currentPage();
console.log(`[TC-BOOK-003] 课程详情页: ${page.path}`);
await screenshot(miniProgram, `member_booking_detail_${TEST_ID}`);
});
test('TC-BOOK-004: 查看课程详情信息', async () => {
const page = await miniProgram.currentPage();
if (!page.path || !page.path.includes('course-detail')) {
console.warn('[TC-BOOK-004] 不在课程详情页,跳过测试');
return;
}
const detailPage = new CourseDetailPage(miniProgram);
const courseInfo = await detailPage.getCourseInfo();
console.log('[TC-BOOK-004] 课程信息:', JSON.stringify(courseInfo));
await screenshot(miniProgram, `member_booking_detail_info_${TEST_ID}`);
});
test('TC-BOOK-005: 预约课程', async () => {
const page = await miniProgram.currentPage();
if (!page.path || !page.path.includes('course-detail')) {
console.warn('[TC-BOOK-005] 不在课程详情页,跳过预约测试');
return;
}
const detailPage = new CourseDetailPage(miniProgram);
const booked = await detailPage.bookCourse();
console.log(`[TC-BOOK-005] 预约结果: ${booked}`);
await screenshot(miniProgram, `member_booking_result_${TEST_ID}`);
// 验证预约成功提示
if (booked) {
const success = await detailPage.verifyBookingSuccess();
console.log(`[TC-BOOK-005] 预约成功验证: ${success}`);
}
});
test('TC-BOOK-006: 查看我的课程', async () => {
// 切换到我的课程 Tab
await switchTab(miniProgram, 2);
await miniProgram.waitFor(2000);
const myCoursesPage = new MyCoursesPage(miniProgram);
try {
await myCoursesPage.waitForLoad();
} catch (e) {
console.warn('[TC-BOOK-006] 等待页面加载异常:', e.message);
}
const page = await miniProgram.currentPage();
expect(page.path).toContain('pages/my-courses/my-courses');
const bookingCount = await myCoursesPage.getBookingCount();
console.log(`[TC-BOOK-006] 我的课程数量: ${bookingCount}`);
await screenshot(miniProgram, `member_booking_my_courses_${TEST_ID}`);
});
test('TC-BOOK-007: 取消预约', async () => {
const myCoursesPage = new MyCoursesPage(miniProgram);
const bookingCount = await myCoursesPage.getBookingCount();
if (bookingCount === 0) {
console.warn('[TC-BOOK-007] 没有可取消的预约,跳过测试');
return;
}
const cancelled = await myCoursesPage.cancelBooking(0);
console.log(`[TC-BOOK-007] 取消预约结果: ${cancelled}`);
if (cancelled) {
await miniProgram.waitFor(1500);
// 验证取消后数量减少
const newCount = await myCoursesPage.getBookingCount();
console.log(`[TC-BOOK-007] 取消后课程数量: ${newCount}`);
}
await screenshot(miniProgram, `member_booking_cancelled_${TEST_ID}`);
});
});