新增e2e测试脚本,修复部分问题
This commit was merged in pull request #51.
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
const { sleep } = require('../helpers/automator');
|
||||
|
||||
class LoginPage {
|
||||
/**
|
||||
* @param {object} miniProgram - miniprogram-automator 实例
|
||||
*/
|
||||
constructor(miniProgram) {
|
||||
this.mp = miniProgram;
|
||||
}
|
||||
|
||||
/**
|
||||
* 等待登录页加载完成
|
||||
*/
|
||||
async waitForLoad() {
|
||||
const page = await this.mp.currentPage();
|
||||
await page.waitFor('.login-form', { timeout: 10000 });
|
||||
await page.waitFor('.login-btn', { timeout: 10000 });
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 填写用户名和密码并提交登录
|
||||
* @param {string} username
|
||||
* @param {string} password
|
||||
*/
|
||||
async login(username, password) {
|
||||
const page = await this.mp.currentPage();
|
||||
await page.waitFor('input', { timeout: 10000 });
|
||||
|
||||
const inputs = await page.$$('input');
|
||||
if (inputs.length < 2) {
|
||||
throw new Error('登录页未找到用户名/密码输入框');
|
||||
}
|
||||
|
||||
// 清空并填写用户名
|
||||
await inputs[0].input(username);
|
||||
await sleep(300);
|
||||
|
||||
// 清空并填写密码
|
||||
await inputs[1].input(password);
|
||||
await sleep(300);
|
||||
|
||||
// 点击登录按钮
|
||||
const loginBtn = await page.$('.login-btn');
|
||||
if (!loginBtn) {
|
||||
throw new Error('未找到登录按钮');
|
||||
}
|
||||
await loginBtn.tap();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取页面上的错误提示(Toast)
|
||||
* 注意:小程序 Toast 通过 wx.showToast 展示,MiniTest 中难以直接捕获。
|
||||
* 此方法返回页面上的错误元素文本。
|
||||
*/
|
||||
async getErrorMessage() {
|
||||
try {
|
||||
const page = await this.mp.currentPage();
|
||||
// 检查是否有 toast 相关的错误元素
|
||||
const toastEl = await page.$('.uni-toast__content');
|
||||
if (toastEl) {
|
||||
const text = await toastEl.text();
|
||||
return text;
|
||||
}
|
||||
} catch (e) {
|
||||
// 忽略
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 等待登录成功后跳转到首页
|
||||
* @param {number} timeoutMs
|
||||
*/
|
||||
async waitForLoginSuccess(timeoutMs = 15000) {
|
||||
const startTime = Date.now();
|
||||
while (Date.now() - startTime < timeoutMs) {
|
||||
try {
|
||||
const page = await this.mp.currentPage();
|
||||
if (page.path.includes('pages/index/index')) {
|
||||
await sleep(1000); // 等待首页渲染
|
||||
return page;
|
||||
}
|
||||
} catch (e) {
|
||||
// 页面跳转中
|
||||
}
|
||||
await sleep(500);
|
||||
}
|
||||
throw new Error(`等待登录成功跳转超时 (${timeoutMs}ms)`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证是否在登录页
|
||||
*/
|
||||
async isOnLoginPage() {
|
||||
const page = await this.mp.currentPage();
|
||||
return page.path.includes('pages/login/login');
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = LoginPage;
|
||||
Reference in New Issue
Block a user