Files
gym-manage/gym-manage-uniapp/e2e/helpers/automator.js
T

79 lines
1.8 KiB
JavaScript

const automator = require('miniprogram-automator');
let sharedInstance = null;
let connectPromise = null;
/**
* 连接小程序自动化实例(使用共享单例,避免多个套件重复启动)
* @returns {Promise<import('miniprogram-automator').MiniProgram>}
*/
async function connectMiniProgram() {
if (sharedInstance) {
return sharedInstance;
}
if (connectPromise) {
return connectPromise;
}
const port = global.DEVTOOLS_PORT || 63956;
connectPromise = (async () => {
console.log('连接小程序自动化...');
console.log(' 端口:', port);
const mp = await automator.connect({
wsEndpoint: `ws://127.0.0.1:${port}`
});
sharedInstance = mp;
console.log('连接小程序自动化成功');
return mp;
})();
try {
return await connectPromise;
} catch (error) {
connectPromise = null;
sharedInstance = null;
throw error;
}
}
/**
* 断开小程序自动化连接(仅在全局 teardown 时使用)
*/
async function disconnectMiniProgram() {
if (sharedInstance) {
try {
await sharedInstance.close();
} catch (_) {
// 忽略关闭错误
}
sharedInstance = null;
connectPromise = null;
console.log('小程序自动化已断开');
}
}
async function waitForText(miniProgram, text, timeout = 10000) {
const startTime = Date.now();
while (Date.now() - startTime < timeout) {
const page = await miniProgram.currentPage();
const content = await page.data();
if (JSON.stringify(content).includes(text)) {
return true;
}
await new Promise(resolve => setTimeout(resolve, 500));
}
return false;
}
module.exports = {
connectMiniProgram,
disconnectMiniProgram,
launchMiniProgram: connectMiniProgram, // 兼容旧引用名
closeMiniProgram: disconnectMiniProgram, // 兼容旧引用名
waitForText
};