const automator = require('miniprogram-automator'); let sharedInstance = null; let connectPromise = null; /** * 连接小程序自动化实例(使用共享单例,避免多个套件重复启动) * @returns {Promise} */ 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 };