← 返回 Skills 市场
openlark

WeChat Mini Program Automation SDK

作者 OpenLark · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ 安全检测通过
14
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install miniprogram-automator
功能描述
Automate WeChat Mini Program UI operations, navigation, data validation, event listening, and screenshots inside DevTools for testing and regression.
使用说明 (SKILL.md)

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",          // optional, defaults to standard install path
  projectPath: "path/to/project",  // project absolute path
}).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)

// Method 1: Launch and connect
automator.launch({
  cliPath: "/Applications/.../cli",    // optional, defaults to Mac/Win paths
  projectPath: "/path/to/project",     // required, project absolute path
  timeout: 30000,                       // optional, max wait (ms)
  port: 9420,                           // optional, WebSocket port
  account: "openid_xxx",                // optional, user openid (multi-account)
  projectConfig: {},                    // optional, overrides project.config.json
  ticket: "xxx",                        // optional, login ticket
});

// Method 2: Connect to already open DevTools
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");   // keep current page
await miniProgram.redirectTo("/pages/other");          // close current page
await miniProgram.navigateBack();                       // go back
await miniProgram.reLaunch("/pages/index");            // close all pages
await miniProgram.switchTab("/pages/tab");              // switch to tabBar
await miniProgram.currentPage();                       // get current page
await miniProgram.pageStack();                         // get page stack

Data & Control

const info = await miniProgram.systemInfo();            // wx.getSystemInfo
const res = await miniProgram.callWxMethod("chooseLocation", {});
await miniProgram.pageScrollTo(100);
const base64 = await miniProgram.screenshot();          // returns base64
await miniProgram.screenshot({path: "./shot.png"});    // save to file

Mock & Injection

// Mock wx method return values (essential for UI testing)
await miniProgram.mockWxMethod("chooseLocation", {
  name: "Tiananmen Square", latitude: 39.90, longitude: 116.40,
});
await miniProgram.restoreWxMethod("chooseLocation");   // restore

// Inject code snippet (closures not supported)
const data = await miniProgram.evaluate(appFunction => {
  return getApp().globalData.userInfo;
});

// Expose method globally for mini program to call
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();   // disconnect
await miniProgram.close();        // disconnect and close project window

// Remote debugging (prints QR code)
await miniProgram.remote({auto: true});  // auto launches on device

Login Tickets

const {ticket, expiredTime} = await miniProgram.getTicket();
await miniProgram.setTicket("new_ticket");
await miniProgram.refreshTicket();         // refresh, extend 2 hours

Performance Audit

const report = await miniProgram.stopAudits({path: "./report.json"});
// Requires "auto-run audit" option enabled

Multi-Account Testing

const accounts = await miniProgram.testAccounts();
// [{nickName: "Zhang San", openid: "xxx"}, ...]

Page Object

const page = await miniProgram.currentPage();

page.path                          // page path
page.query                         // page parameters

const el = await page.$(".class");   // single element (CSS selector)
const els = await page.$$("view");   // element array

await page.waitFor(1000);              // wait ms
await page.waitFor(".loaded");         // wait for element
await page.waitFor(() => {             // wait for condition
  return getApp().globalData.ready;
});

const data = await page.data("list");   // get render data
await page.setData({list: []});         // set render data

const {width, height} = await page.size();  // scrollable size
const scrollTop = await page.scrollTop();   // scroll position

await page.callMethod("onCustomEvent", arg1); // call page method

Element Object

el.tagName         // tag name (lowercase)

// Properties & data
el.text()                        // text content
el.attribute("class")            // tag attribute (always string)
el.property("value")             // DOM property (may return non-string)
el.value()                       // element value
el.style("color")                // computed style
el.wxml()                        // WXML (excluding self)
el.outerWxml()                   // WXML (including self)

// Size & position
const {width, height} = await el.size();    // element size
const {left, top} = await el.offset();      // absolute position (px)

// Child element search
const child = await el.$(".inner");         // find within scope
const children = await el.$$("view");

// Interactions
await el.tap();                              // tap
await el.longpress();                        // long press
await el.input("new text");                  // input/textarea only
await el.touchstart({touches, changedTouches});
await el.touchmove({touches, changedTouches});
await el.touchend({touches, changedTouches});
await el.trigger("eventName", {detail});     // trigger event

// Custom components
await el.callMethod("myMethod", arg1);       // call component method
await el.data("path");                       // get component render data
await el.setData({key: val});                // set component render data

// Component-specific
await el.callContextMethod("play");           // video component
await el.scrollTo(100, 200);                  // scroll-view
await el.swipeTo(2);                          // swiper
await el.moveTo(50, 30);                      // movable-view
await el.slideTo(80);                         // slider
el.scrollWidth / el.scrollHeight              // scroll-view dimensions

Reference Files

File Content
references/api.md Complete API parameter tables and examples
安全使用建议
Install this only if you intend to automate WeChat Mini Program testing. Because it can drive DevTools, inject test code, take screenshots, use login tickets, and control app state, use it with trusted projects and avoid exposing production accounts or sensitive test data.
能力评估
Purpose & Capability
The skill documents UI automation, navigation, data inspection, screenshots, mocking, code evaluation, tickets, and remote debugging; these are high-capability features but they directly match the stated E2E testing purpose.
Instruction Scope
Instructions are scoped to using miniprogram-automator with WeChat DevTools and do not contain hidden directives, prompt manipulation, unrelated data access, or automatic execution.
Install Mechanism
The install path is a normal npm dev dependency command for miniprogram-automator; the skill itself only contains markdown documentation and no executable scripts.
Credentials
Requiring WeChat DevTools CLI/HTTP functionality is proportionate for automation, but users should enable it only in trusted development environments and test projects.
Persistence & Privilege
No persistent background process, privilege escalation, or credential harvesting is present in the artifact; any screenshots, reports, tickets, or mutations are user-scripted SDK actions.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install miniprogram-automator
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /miniprogram-automator 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release of miniprogram-automator: - Introduces an SDK for automating WeChat Mini Program UI operations and data validation in DevTools. - Supports page navigation, element selection/interactions, data injection, screenshots, and event/event listening. - Features runtime mocking and code injection for enhanced E2E and regression testing. - Provides rich APIs for automating user flows, controlling components, and retrieving audit/performance reports. - Suitable for automated UI, E2E, and regression testing scenarios.
元数据
Slug miniprogram-automator
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

WeChat Mini Program Automation SDK 是什么?

Automate WeChat Mini Program UI operations, navigation, data validation, event listening, and screenshots inside DevTools for testing and regression. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 14 次。

如何安装 WeChat Mini Program Automation SDK?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install miniprogram-automator」即可一键安装,无需额外配置。

WeChat Mini Program Automation SDK 是免费的吗?

是的,WeChat Mini Program Automation SDK 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

WeChat Mini Program Automation SDK 支持哪些平台?

WeChat Mini Program Automation SDK 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 WeChat Mini Program Automation SDK?

由 OpenLark(@openlark)开发并维护,当前版本 v1.0.0。

💬 留言讨论