| name | miniprogram-automator |
| description | WeChat Mini Program Automation SDK (miniprogram-automator): Automate UI operations and data validation of mini programs at runtime. Supports page navigation, element selection and interaction, data injection, screenshots, event listening. For E2E testing, UI automation, regression testing. |
miniprogram-automator
WeChat Mini Program Automation SDK · v0.12.1 · Node >= 8.0
Script-driven UI automation and data validation for mini programs running inside WeChat DevTools. Control taps, inputs, screenshots, and more programmatically.
Installation & Prerequisites
npm install miniprogram-automator --save-dev
Environment requirements:
| Condition | Version |
|---|
| Node.js | >= 8.0 |
| Base library | >= 2.7.3 |
| DevTools | >= 1.02.1907232 |
Must enable: DevTools security settings → CLI/HTTP call functionality
Quick Start
const automator = require("miniprogram-automator");
automator.launch({
cliPath: "path/to/cli",
projectPath: "path/to/project",
}).then(async miniProgram => {
const page = await miniProgram.reLaunch("/page/component/index");
await page.waitFor(500);
const element = await page.$(".kind-list-item-hd");
console.log(await element.attribute("class"));
await element.tap();
await miniProgram.close();
});
Automator (Entry Point)
automator.launch({
cliPath: "/Applications/.../cli",
projectPath: "/path/to/project",
timeout: 30000,
port: 9420,
account: "openid_xxx",
projectConfig: {},
ticket: "xxx",
});
automator.connect({
wsEndpoint: "ws://127.0.0.1:9420",
});
Default cliPath:
- Mac:
/Applications/wechatwebdevtools.app/Contents/MacOS/cli
- Win:
C:/Program Files (x86)/Tencent/微信web开发者工具/cli.bat
MiniProgram Object
Returned by launch/connect.
Page Navigation
await miniProgram.navigateTo("/pages/index/index");
await miniProgram.redirectTo("/pages/other");
await miniProgram.navigateBack();
await miniProgram.reLaunch("/pages/index");
await miniProgram.switchTab("/pages/tab");
await miniProgram.currentPage();
await miniProgram.pageStack();
Data & Control
const info = await miniProgram.systemInfo();
const res = await miniProgram.callWxMethod("chooseLocation", {});
await miniProgram.pageScrollTo(100);
const base64 = await miniProgram.screenshot();
await miniProgram.screenshot({path: "./shot.png"});
Mock & Injection
await miniProgram.mockWxMethod("chooseLocation", {
name: "Tiananmen Square", latitude: 39.90, longitude: 116.40,
});
await miniProgram.restoreWxMethod("chooseLocation");
const data = await miniProgram.evaluate(appFunction => {
return getApp().globalData.userInfo;
});
await miniProgram.exposeFunction("onTestEvent", (data) => {
console.log("Event received:", data);
});
Event Listening
miniProgram.on("console", msg => {
console.log(`[${msg.type}]`, msg.args);
});
miniProgram.on("exception", err => {
console.error(err.message, err.stack);
});
Connection Management
await miniProgram.disconnect();
await miniProgram.close();
await miniProgram.remote({auto: true});
Login Tickets
const {ticket, expiredTime} = await miniProgram.getTicket();
await miniProgram.setTicket("new_ticket");
await miniProgram.refreshTicket();
Performance Audit
const report = await miniProgram.stopAudits({path: "./report.json"});
Multi-Account Testing
const accounts = await miniProgram.testAccounts();
Page Object
const page = await miniProgram.currentPage();
page.path
page.query
const el = await page.$(".class");
const els = await page.$$("view");
await page.waitFor(1000);
await page.waitFor(".loaded");
await page.waitFor(() => {
return getApp().globalData.ready;
});
const data = await page.data("list");
await page.setData({list: []});
const {width, height} = await page.size();
const scrollTop = await page.scrollTop();
await page.(, arg1);
Element Object
el.tagName
el.text()
el.attribute("class")
el.property("value")
el.value()
el.style("color")
el.wxml()
el.outerWxml()
const {width, height} = await el.size();
const {left, top} = await el.offset();
const child = await el.$(".inner");
const children = await el.$$("view");
await el.tap();
await el.longpress();
await el.input();
el.({touches, changedTouches});
el.({touches, changedTouches});
el.({touches, changedTouches});
el.(, {detail});
el.(, arg1);
el.();
el.({: val});
el.();
el.(, );
el.();
el.(, );
el.();
el. / el.
Reference Files