增加 后端,后台管理系统,uniapp会员端的自动化测试。

This commit is contained in:
2026-07-21 18:09:29 +08:00
parent df0e68469b
commit 6b60b3b4da
64 changed files with 13095 additions and 376 deletions
@@ -0,0 +1,92 @@
/**
* 我的课程页 Page Object
*/
class MyCoursesPage {
constructor(miniProgram) {
this.mp = miniProgram;
}
async waitForReady() {
const page = await this.mp.currentPage();
await page.waitFor(2000);
console.log('我的课程页加载完成');
}
async getPath() {
const page = await this.mp.currentPage();
return page.path;
}
/**
* 点击取消预约按钮
*/
async clickCancelBooking(index = 0) {
const page = await this.mp.currentPage();
const cancelBtns = await page.$$('.cancel-btn');
if (cancelBtns.length > index) {
await cancelBtns[index].tap();
console.log(`取消第${index + 1}个预约`);
}
}
/**
* 扫码签到:mock wx.scanCode 后点击签到按钮
* @param {string} courseName 课程名称(如"流瑜伽"- 用于匹配对应 booking card
*/
async scanSignIn(courseName) {
const page = await this.mp.currentPage();
// 先通过 page data 确认目标课程存在
const pageData = await page.data();
const bookings = pageData.bookings || [];
const targetBooking = bookings.find(b => b.courseName === courseName);
if (!targetBooking) {
console.log(`未在数据中找到「${courseName}」的预约记录`);
return false;
}
const targetIndex = bookings.indexOf(targetBooking);
console.log(`${courseName}」在 bookings[${targetIndex}]`);
// 通过 DOM 元素匹配
const cards = await page.$$('.booking-card');
console.log(`找到 ${cards.length} 个预约卡片`);
if (cards.length > targetIndex) {
const signBtn = await cards[targetIndex].$('.signin-btn');
if (signBtn) {
await signBtn.tap();
console.log(`点击「${courseName}」扫码签到按钮`);
return true;
}
console.log('未找到 signin-btn,尝试 wxml 匹配');
// 回退:通过 wxml 匹配
for (let i = 0; i < cards.length; i++) {
const wxml = await cards[i].wxml();
if (wxml.includes(courseName)) {
const btn = await cards[i].$('.signin-btn');
if (btn) {
await btn.tap();
console.log('点击扫码签到按钮');
return true;
}
}
}
}
console.log(`未找到「${courseName}」的签到按钮`);
return false;
}
async containsText(text) {
const page = await this.mp.currentPage();
const wxml = await page.wxml();
return wxml.includes(text);
}
async getPageData() {
const page = await this.mp.currentPage();
return await page.data();
}
}
module.exports = { MyCoursesPage };