@creatoria/miniapp-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +469 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +144 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +73 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +118 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +50 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +189 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/core/element-ref.d.ts +44 -0
- package/dist/core/element-ref.d.ts.map +1 -0
- package/dist/core/element-ref.js +213 -0
- package/dist/core/element-ref.js.map +1 -0
- package/dist/core/logger.d.ts +55 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +378 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/output.d.ts +21 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +56 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/report-generator.d.ts +24 -0
- package/dist/core/report-generator.d.ts.map +1 -0
- package/dist/core/report-generator.js +212 -0
- package/dist/core/report-generator.js.map +1 -0
- package/dist/core/session.d.ts +83 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +306 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/timeout.d.ts +49 -0
- package/dist/core/timeout.d.ts.map +1 -0
- package/dist/core/timeout.js +67 -0
- package/dist/core/timeout.js.map +1 -0
- package/dist/core/tool-logger.d.ts +83 -0
- package/dist/core/tool-logger.d.ts.map +1 -0
- package/dist/core/tool-logger.js +453 -0
- package/dist/core/tool-logger.js.map +1 -0
- package/dist/core/validation.d.ts +39 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +93 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +85 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/assert.d.ts +108 -0
- package/dist/tools/assert.d.ts.map +1 -0
- package/dist/tools/assert.js +291 -0
- package/dist/tools/assert.js.map +1 -0
- package/dist/tools/automator.d.ts +45 -0
- package/dist/tools/automator.d.ts.map +1 -0
- package/dist/tools/automator.js +186 -0
- package/dist/tools/automator.js.map +1 -0
- package/dist/tools/element.d.ts +253 -0
- package/dist/tools/element.d.ts.map +1 -0
- package/dist/tools/element.js +615 -0
- package/dist/tools/element.js.map +1 -0
- package/dist/tools/index.d.ts +97 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +1565 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/miniprogram.d.ts +79 -0
- package/dist/tools/miniprogram.d.ts.map +1 -0
- package/dist/tools/miniprogram.js +245 -0
- package/dist/tools/miniprogram.js.map +1 -0
- package/dist/tools/network.d.ts +65 -0
- package/dist/tools/network.d.ts.map +1 -0
- package/dist/tools/network.js +205 -0
- package/dist/tools/network.js.map +1 -0
- package/dist/tools/page.d.ts +108 -0
- package/dist/tools/page.d.ts.map +1 -0
- package/dist/tools/page.js +307 -0
- package/dist/tools/page.js.map +1 -0
- package/dist/tools/record.d.ts +86 -0
- package/dist/tools/record.d.ts.map +1 -0
- package/dist/tools/record.js +316 -0
- package/dist/tools/record.js.map +1 -0
- package/dist/tools/snapshot.d.ts +82 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +258 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/types.d.ts +240 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/docs/SIMPLE_USAGE.md +210 -0
- package/docs/api/README.md +244 -0
- package/docs/api/assert.md +1015 -0
- package/docs/api/automator.md +345 -0
- package/docs/api/element.md +1454 -0
- package/docs/api/miniprogram.md +558 -0
- package/docs/api/network.md +883 -0
- package/docs/api/page.md +909 -0
- package/docs/api/record.md +963 -0
- package/docs/api/snapshot.md +792 -0
- package/docs/architecture.E-Docs.md +1359 -0
- package/docs/architecture.F1.md +720 -0
- package/docs/architecture.F2.md +871 -0
- package/docs/architecture.F3.md +905 -0
- package/docs/architecture.md +90 -0
- package/docs/charter.A1.align.yaml +170 -0
- package/docs/charter.A2.align.yaml +199 -0
- package/docs/charter.A3.align.yaml +242 -0
- package/docs/charter.A4.align.yaml +227 -0
- package/docs/charter.B1.align.yaml +179 -0
- package/docs/charter.B2.align.yaml +200 -0
- package/docs/charter.B3.align.yaml +200 -0
- package/docs/charter.B4.align.yaml +188 -0
- package/docs/charter.C1.align.yaml +190 -0
- package/docs/charter.C2.align.yaml +202 -0
- package/docs/charter.C3.align.yaml +211 -0
- package/docs/charter.C4.align.yaml +263 -0
- package/docs/charter.C5.align.yaml +220 -0
- package/docs/charter.D1.align.yaml +190 -0
- package/docs/charter.D2.align.yaml +234 -0
- package/docs/charter.D3.align.yaml +206 -0
- package/docs/charter.E-Docs.align.yaml +294 -0
- package/docs/charter.F1.align.yaml +193 -0
- package/docs/charter.F2.align.yaml +248 -0
- package/docs/charter.F3.align.yaml +287 -0
- package/docs/charter.G.align.yaml +174 -0
- package/docs/charter.align.yaml +111 -0
- package/docs/examples/session-report-usage.md +449 -0
- package/docs/maintenance.md +682 -0
- package/docs/playwright-mcp/350/260/203/347/240/224.md +53 -0
- package/docs/setup-guide.md +775 -0
- package/docs/tasks.A1.atomize.md +296 -0
- package/docs/tasks.A2.atomize.md +408 -0
- package/docs/tasks.A3.atomize.md +564 -0
- package/docs/tasks.A4.atomize.md +496 -0
- package/docs/tasks.B1.atomize.md +352 -0
- package/docs/tasks.B2.atomize.md +561 -0
- package/docs/tasks.B3.atomize.md +508 -0
- package/docs/tasks.B4.atomize.md +504 -0
- package/docs/tasks.C1.atomize.md +540 -0
- package/docs/tasks.C2.atomize.md +665 -0
- package/docs/tasks.C3.atomize.md +745 -0
- package/docs/tasks.C4.atomize.md +908 -0
- package/docs/tasks.C5.atomize.md +755 -0
- package/docs/tasks.D1.atomize.md +547 -0
- package/docs/tasks.D2.atomize.md +619 -0
- package/docs/tasks.D3.atomize.md +790 -0
- package/docs/tasks.E-Docs.atomize.md +1204 -0
- package/docs/tasks.atomize.md +189 -0
- package/docs/troubleshooting.md +855 -0
- package/docs//345/256/214/346/225/264/345/256/236/347/216/260/346/226/271/346/241/210.md +155 -0
- package/docs//345/274/200/345/217/221/344/273/273/345/212/241/350/256/241/345/210/222.md +110 -0
- package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226API/345/256/214/346/225/264/346/226/207/346/241/243.md +894 -0
- package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226/345/256/214/346/225/264/346/223/215/344/275/234/346/211/213/345/206/214.md +1885 -0
- package/docs//346/216/245/345/217/243/346/226/271/346/241/210.md +565 -0
- package/docs//347/254/254/344/270/200/347/211/210/346/234/254/346/226/271/346/241/210.md +380 -0
- package/package.json +87 -0
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
# MiniProgram API
|
|
2
|
+
|
|
3
|
+
> MiniProgram 工具提供小程序级别的操作,包括页面导航、微信 API 调用、JavaScript 执行、截图和系统信息获取。
|
|
4
|
+
|
|
5
|
+
## 工具列表
|
|
6
|
+
|
|
7
|
+
| 工具名称 | 描述 | 必需参数 |
|
|
8
|
+
|---------|------|----------|
|
|
9
|
+
| `miniprogram_navigate` | 页面导航(5 种方法) | method |
|
|
10
|
+
| `miniprogram_call_wx` | 调用微信 API(wx.*) | method |
|
|
11
|
+
| `miniprogram_evaluate` | 执行 JavaScript 代码 | expression |
|
|
12
|
+
| `miniprogram_screenshot` | 截图(支持全屏) | 无 |
|
|
13
|
+
| `miniprogram_get_page_stack` | 获取页面栈信息 | 无 |
|
|
14
|
+
| `miniprogram_get_system_info` | 获取系统信息 | 无 |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## miniprogram_navigate
|
|
19
|
+
|
|
20
|
+
在小程序中进行页面导航,支持 5 种导航方法。
|
|
21
|
+
|
|
22
|
+
### 参数
|
|
23
|
+
|
|
24
|
+
| 参数名 | 类型 | 必需 | 默认值 | 描述 |
|
|
25
|
+
|--------|------|------|--------|------|
|
|
26
|
+
| `method` | string | ✅ | - | 导航方法:`navigateTo`、`redirectTo`、`reLaunch`、`switchTab`、`navigateBack` |
|
|
27
|
+
| `url` | string | ⭐ | - | 目标页面路径(`navigateBack` 不需要) |
|
|
28
|
+
| `delta` | number | ⭐ | 1 | 返回的页面数(仅 `navigateBack` 使用) |
|
|
29
|
+
|
|
30
|
+
**导航方法说明**:
|
|
31
|
+
- **navigateTo**: 保留当前页面,跳转到应用内的某个页面(最多 10 层)
|
|
32
|
+
- **redirectTo**: 关闭当前页面,跳转到应用内的某个页面
|
|
33
|
+
- **reLaunch**: 关闭所有页面,打开到应用内的某个页面
|
|
34
|
+
- **switchTab**: 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
|
|
35
|
+
- **navigateBack**: 关闭当前页面,返回上一页面或多级页面
|
|
36
|
+
|
|
37
|
+
### 返回值
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
{
|
|
41
|
+
success: true,
|
|
42
|
+
message: "Successfully navigated using {method}",
|
|
43
|
+
currentPage: "pages/index/index" // 导航后的当前页面路径
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 错误处理
|
|
48
|
+
|
|
49
|
+
- **未连接**: `Error: MiniProgram not connected`
|
|
50
|
+
- **URL 缺失**: `Error: URL is required for {method}`
|
|
51
|
+
- **未知方法**: `Error: Unknown navigation method: {method}`
|
|
52
|
+
- **导航失败**: `Error: Navigation failed: {reason}`
|
|
53
|
+
|
|
54
|
+
### 使用示例
|
|
55
|
+
|
|
56
|
+
```javascript
|
|
57
|
+
// 示例 1: navigateTo - 跳转到详情页
|
|
58
|
+
await miniprogram_navigate({
|
|
59
|
+
method: "navigateTo",
|
|
60
|
+
url: "/pages/detail/detail?id=123"
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
// 示例 2: redirectTo - 替换当前页
|
|
64
|
+
await miniprogram_navigate({
|
|
65
|
+
method: "redirectTo",
|
|
66
|
+
url: "/pages/result/success"
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
// 示例 3: reLaunch - 重新启动到首页
|
|
70
|
+
await miniprogram_navigate({
|
|
71
|
+
method: "reLaunch",
|
|
72
|
+
url: "/pages/index/index"
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
// 示例 4: switchTab - 切换 Tab
|
|
76
|
+
await miniprogram_navigate({
|
|
77
|
+
method: "switchTab",
|
|
78
|
+
url: "/pages/profile/profile"
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// 示例 5: navigateBack - 返回上一页
|
|
82
|
+
await miniprogram_navigate({
|
|
83
|
+
method: "navigateBack"
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
// 示例 6: navigateBack - 返回多级页面
|
|
87
|
+
await miniprogram_navigate({
|
|
88
|
+
method: "navigateBack",
|
|
89
|
+
delta: 2 // 返回 2 层
|
|
90
|
+
})
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 注意事项
|
|
94
|
+
|
|
95
|
+
- ⚠️ **页面栈限制**: `navigateTo` 最多 10 层,超出会失败
|
|
96
|
+
- ⚠️ **Tab 页面**: `switchTab` 只能跳转到 `app.json` 中配置的 tabBar 页面
|
|
97
|
+
- 💡 **查询参数**: 使用 `?key=value&key2=value2` 格式传递参数
|
|
98
|
+
- 💡 **相对路径**: URL 必须是绝对路径,以 `/` 开头
|
|
99
|
+
|
|
100
|
+
### 相关工具
|
|
101
|
+
|
|
102
|
+
- [`miniprogram_get_page_stack`](#miniprogram_get_page_stack) - 查看当前页面栈
|
|
103
|
+
- [`page_query`](./page.md#page_query) - 导航后查询页面元素
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## miniprogram_call_wx
|
|
108
|
+
|
|
109
|
+
调用微信小程序的 wx.* API 方法。
|
|
110
|
+
|
|
111
|
+
### 参数
|
|
112
|
+
|
|
113
|
+
| 参数名 | 类型 | 必需 | 默认值 | 描述 |
|
|
114
|
+
|--------|------|------|--------|------|
|
|
115
|
+
| `method` | string | ✅ | - | 微信 API 方法名(不含 `wx.` 前缀) |
|
|
116
|
+
| `args` | any[] | ⭐ | [] | 方法参数数组 |
|
|
117
|
+
|
|
118
|
+
### 返回值
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
{
|
|
122
|
+
success: true,
|
|
123
|
+
message: "Successfully called wx.{method}",
|
|
124
|
+
result: any // API 调用结果
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 错误处理
|
|
129
|
+
|
|
130
|
+
- **未连接**: `Error: MiniProgram not connected`
|
|
131
|
+
- **调用失败**: `Error: wx.{method} call failed: {reason}`
|
|
132
|
+
|
|
133
|
+
### 使用示例
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
// 示例 1: 调用 wx.showToast
|
|
137
|
+
await miniprogram_call_wx({
|
|
138
|
+
method: "showToast",
|
|
139
|
+
args: [{
|
|
140
|
+
title: "操作成功",
|
|
141
|
+
icon: "success",
|
|
142
|
+
duration: 2000
|
|
143
|
+
}]
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
// 示例 2: 调用 wx.setStorage
|
|
147
|
+
await miniprogram_call_wx({
|
|
148
|
+
method: "setStorage",
|
|
149
|
+
args: [{
|
|
150
|
+
key: "userInfo",
|
|
151
|
+
data: { name: "张三", age: 25 }
|
|
152
|
+
}]
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
// 示例 3: 调用 wx.getLocation
|
|
156
|
+
const result = await miniprogram_call_wx({
|
|
157
|
+
method: "getLocation",
|
|
158
|
+
args: [{ type: "wgs84" }]
|
|
159
|
+
})
|
|
160
|
+
console.log(result.result) // { latitude: 39.9, longitude: 116.4 }
|
|
161
|
+
|
|
162
|
+
// 示例 4: 调用无参数的 API
|
|
163
|
+
await miniprogram_call_wx({
|
|
164
|
+
method: "hideLoading"
|
|
165
|
+
})
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 注意事项
|
|
169
|
+
|
|
170
|
+
- ⚠️ **权限要求**: 某些 API 需要在 `app.json` 中配置权限
|
|
171
|
+
- ⚠️ **异步 API**: 大部分 wx API 是异步的,返回 Promise
|
|
172
|
+
- 💡 **参数格式**: args 是数组,每个元素对应一个参数
|
|
173
|
+
- 💡 **结果获取**: API 返回值在 `result` 字段中
|
|
174
|
+
|
|
175
|
+
### 相关工具
|
|
176
|
+
|
|
177
|
+
- [`miniprogram_evaluate`](#miniprogram_evaluate) - 执行自定义 JS 代码
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## miniprogram_evaluate
|
|
182
|
+
|
|
183
|
+
在小程序上下文中执行 JavaScript 代码。
|
|
184
|
+
|
|
185
|
+
### 参数
|
|
186
|
+
|
|
187
|
+
| 参数名 | 类型 | 必需 | 默认值 | 描述 |
|
|
188
|
+
|--------|------|------|--------|------|
|
|
189
|
+
| `expression` | string | ✅ | - | 要执行的 JavaScript 表达式或代码块 |
|
|
190
|
+
| `args` | any[] | ⭐ | [] | 传递给表达式的参数 |
|
|
191
|
+
|
|
192
|
+
### 返回值
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
{
|
|
196
|
+
success: true,
|
|
197
|
+
message: "Expression evaluated successfully",
|
|
198
|
+
result: any // 表达式执行结果
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 错误处理
|
|
203
|
+
|
|
204
|
+
- **未连接**: `Error: MiniProgram not connected`
|
|
205
|
+
- **执行失败**: `Error: Evaluation failed: {reason}`
|
|
206
|
+
|
|
207
|
+
### 使用示例
|
|
208
|
+
|
|
209
|
+
```javascript
|
|
210
|
+
// 示例 1: 获取全局变量
|
|
211
|
+
const result = await miniprogram_evaluate({
|
|
212
|
+
expression: "getApp().globalData.userInfo"
|
|
213
|
+
})
|
|
214
|
+
console.log(result.result) // { name: "...", ... }
|
|
215
|
+
|
|
216
|
+
// 示例 2: 执行函数
|
|
217
|
+
await miniprogram_evaluate({
|
|
218
|
+
expression: "getApp().login()"
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
// 示例 3: 计算表达式
|
|
222
|
+
const result = await miniprogram_evaluate({
|
|
223
|
+
expression: "1 + 2 + 3"
|
|
224
|
+
})
|
|
225
|
+
console.log(result.result) // 6
|
|
226
|
+
|
|
227
|
+
// 示例 4: 访问页面数据
|
|
228
|
+
const result = await miniprogram_evaluate({
|
|
229
|
+
expression: "getCurrentPages()[0].data.userList.length"
|
|
230
|
+
})
|
|
231
|
+
console.log(result.result) // 数组长度
|
|
232
|
+
|
|
233
|
+
// 示例 5: 带参数的表达式
|
|
234
|
+
const result = await miniprogram_evaluate({
|
|
235
|
+
expression: "(a, b) => a + b",
|
|
236
|
+
args: [10, 20]
|
|
237
|
+
})
|
|
238
|
+
console.log(result.result) // 30
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 注意事项
|
|
242
|
+
|
|
243
|
+
- ⚠️ **作用域**: 代码在小程序全局作用域中执行
|
|
244
|
+
- ⚠️ **安全性**: 避免执行不可信的代码
|
|
245
|
+
- 💡 **调试**: 适合获取运行时状态和调试
|
|
246
|
+
- 💡 **getApp()**: 可以通过 `getApp()` 访问全局数据
|
|
247
|
+
- 💡 **getCurrentPages()**: 可以通过 `getCurrentPages()` 访问页面栈
|
|
248
|
+
|
|
249
|
+
### 相关工具
|
|
250
|
+
|
|
251
|
+
- [`miniprogram_call_wx`](#miniprogram_call_wx) - 调用微信 API
|
|
252
|
+
- [`page_get_data`](./page.md#page_get_data) - 获取页面数据(推荐)
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## miniprogram_screenshot
|
|
257
|
+
|
|
258
|
+
截取小程序当前屏幕内容。
|
|
259
|
+
|
|
260
|
+
### 参数
|
|
261
|
+
|
|
262
|
+
| 参数名 | 类型 | 必需 | 默认值 | 描述 |
|
|
263
|
+
|--------|------|------|--------|------|
|
|
264
|
+
| `filename` | string | ⭐ | 自动生成 | 截图文件名(如 `my-screenshot.png`) |
|
|
265
|
+
| `fullPage` | boolean | ⭐ | false | 是否截取整个页面(包括滚动区域) |
|
|
266
|
+
|
|
267
|
+
### 返回值
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
{
|
|
271
|
+
success: true,
|
|
272
|
+
message: "Screenshot captured successfully",
|
|
273
|
+
path: "/absolute/path/to/screenshot-001-20251002-100000.png"
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### 错误处理
|
|
278
|
+
|
|
279
|
+
- **未连接**: `Error: MiniProgram not connected`
|
|
280
|
+
- **OutputManager 不可用**: `Error: OutputManager not available`
|
|
281
|
+
- **截图失败**: `Error: Screenshot failed: {reason}`
|
|
282
|
+
|
|
283
|
+
### 使用示例
|
|
284
|
+
|
|
285
|
+
```javascript
|
|
286
|
+
// 示例 1: 基础截图(当前视口)
|
|
287
|
+
const result = await miniprogram_screenshot()
|
|
288
|
+
console.log(result.path) // "/path/to/screenshot-001-....png"
|
|
289
|
+
|
|
290
|
+
// 示例 2: 全页面截图
|
|
291
|
+
const result = await miniprogram_screenshot({
|
|
292
|
+
fullPage: true
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
// 示例 3: 自定义文件名
|
|
296
|
+
const result = await miniprogram_screenshot({
|
|
297
|
+
filename: "login-page.png"
|
|
298
|
+
})
|
|
299
|
+
|
|
300
|
+
// 示例 4: 捕获失败场景
|
|
301
|
+
try {
|
|
302
|
+
await some_operation()
|
|
303
|
+
} catch (error) {
|
|
304
|
+
// 失败时截图保存现场
|
|
305
|
+
const screenshot = await miniprogram_screenshot({
|
|
306
|
+
filename: "error-screenshot.png"
|
|
307
|
+
})
|
|
308
|
+
console.log("错误截图已保存:", screenshot.path)
|
|
309
|
+
throw error
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### 注意事项
|
|
314
|
+
|
|
315
|
+
- ⚠️ **输出目录**: 截图保存到配置的输出目录(默认 `.mcp-artifacts/`)
|
|
316
|
+
- ⚠️ **fullPage 性能**: 全页面截图可能较慢,取决于页面高度
|
|
317
|
+
- 💡 **自动命名**: 不指定 filename 时自动生成 `screenshot-{counter}-{timestamp}.png`
|
|
318
|
+
- 💡 **调试工具**: 适合捕获失败场景用于调试
|
|
319
|
+
|
|
320
|
+
### 相关工具
|
|
321
|
+
|
|
322
|
+
- [`snapshot_page`](./snapshot.md#snapshot_page) - 页面快照(数据 + 截图)
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## miniprogram_get_page_stack
|
|
327
|
+
|
|
328
|
+
获取当前小程序的页面栈信息。
|
|
329
|
+
|
|
330
|
+
### 参数
|
|
331
|
+
|
|
332
|
+
无参数。
|
|
333
|
+
|
|
334
|
+
### 返回值
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
{
|
|
338
|
+
success: true,
|
|
339
|
+
message: "Page stack retrieved successfully",
|
|
340
|
+
pages: [
|
|
341
|
+
{
|
|
342
|
+
path: "pages/index/index",
|
|
343
|
+
query: {}
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
path: "pages/detail/detail",
|
|
347
|
+
query: { id: "123", from: "search" }
|
|
348
|
+
}
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 错误处理
|
|
354
|
+
|
|
355
|
+
- **未连接**: `Error: MiniProgram not connected`
|
|
356
|
+
- **获取失败**: `Error: Failed to get page stack: {reason}`
|
|
357
|
+
|
|
358
|
+
### 使用示例
|
|
359
|
+
|
|
360
|
+
```javascript
|
|
361
|
+
// 示例 1: 获取页面栈
|
|
362
|
+
const result = await miniprogram_get_page_stack()
|
|
363
|
+
console.log(`当前页面栈深度: ${result.pages.length}`)
|
|
364
|
+
result.pages.forEach((page, index) => {
|
|
365
|
+
console.log(`[${index}] ${page.path}`, page.query)
|
|
366
|
+
})
|
|
367
|
+
|
|
368
|
+
// 示例 2: 获取当前页面信息
|
|
369
|
+
const result = await miniprogram_get_page_stack()
|
|
370
|
+
const currentPage = result.pages[result.pages.length - 1]
|
|
371
|
+
console.log("当前页面:", currentPage.path)
|
|
372
|
+
console.log("查询参数:", currentPage.query)
|
|
373
|
+
|
|
374
|
+
// 示例 3: 检查页面栈深度
|
|
375
|
+
const result = await miniprogram_get_page_stack()
|
|
376
|
+
if (result.pages.length >= 10) {
|
|
377
|
+
console.warn("页面栈已满,无法再使用 navigateTo")
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### 注意事项
|
|
382
|
+
|
|
383
|
+
- 💡 **页面顺序**: 数组从栈底到栈顶排列,最后一个元素是当前页面
|
|
384
|
+
- 💡 **查询参数**: `query` 包含页面 URL 的查询参数对象
|
|
385
|
+
- 💡 **栈深度限制**: 小程序页面栈最多 10 层
|
|
386
|
+
- 💡 **Session 更新**: 调用此工具会更新 `session.pages` 缓存
|
|
387
|
+
|
|
388
|
+
### 相关工具
|
|
389
|
+
|
|
390
|
+
- [`miniprogram_navigate`](#miniprogram_navigate) - 页面导航
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## miniprogram_get_system_info
|
|
395
|
+
|
|
396
|
+
获取小程序运行环境的系统信息。
|
|
397
|
+
|
|
398
|
+
### 参数
|
|
399
|
+
|
|
400
|
+
无参数。
|
|
401
|
+
|
|
402
|
+
### 返回值
|
|
403
|
+
|
|
404
|
+
```typescript
|
|
405
|
+
{
|
|
406
|
+
success: true,
|
|
407
|
+
message: "System information retrieved successfully",
|
|
408
|
+
systemInfo: {
|
|
409
|
+
platform: "devtools", // 平台:ios/android/devtools
|
|
410
|
+
version: "8.0.0", // 微信版本号
|
|
411
|
+
SDKVersion: "2.0.0", // 基础库版本
|
|
412
|
+
system: "macOS 10.15.7", // 操作系统信息
|
|
413
|
+
model: "iPhone 12", // 设备型号
|
|
414
|
+
pixelRatio: 2, // 设备像素比
|
|
415
|
+
screenWidth: 375, // 屏幕宽度(px)
|
|
416
|
+
screenHeight: 667, // 屏幕高度(px)
|
|
417
|
+
windowWidth: 375, // 可使用窗口宽度(px)
|
|
418
|
+
windowHeight: 667, // 可使用窗口高度(px)
|
|
419
|
+
language: "zh_CN", // 语言
|
|
420
|
+
// ... 更多字段
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### 错误处理
|
|
426
|
+
|
|
427
|
+
- **未连接**: `Error: MiniProgram not connected`
|
|
428
|
+
- **获取失败**: `Error: Failed to get system info: {reason}`
|
|
429
|
+
|
|
430
|
+
### 使用示例
|
|
431
|
+
|
|
432
|
+
```javascript
|
|
433
|
+
// 示例 1: 获取系统信息
|
|
434
|
+
const result = await miniprogram_get_system_info()
|
|
435
|
+
console.log("平台:", result.systemInfo.platform)
|
|
436
|
+
console.log("微信版本:", result.systemInfo.version)
|
|
437
|
+
console.log("基础库版本:", result.systemInfo.SDKVersion)
|
|
438
|
+
|
|
439
|
+
// 示例 2: 检查运行环境
|
|
440
|
+
const result = await miniprogram_get_system_info()
|
|
441
|
+
if (result.systemInfo.platform === "devtools") {
|
|
442
|
+
console.log("当前在开发者工具中运行")
|
|
443
|
+
} else {
|
|
444
|
+
console.log("当前在真机/模拟器中运行")
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// 示例 3: 获取设备信息
|
|
448
|
+
const result = await miniprogram_get_system_info()
|
|
449
|
+
console.log("设备型号:", result.systemInfo.model)
|
|
450
|
+
console.log("屏幕尺寸:", `${result.systemInfo.screenWidth}x${result.systemInfo.screenHeight}`)
|
|
451
|
+
console.log("像素比:", result.systemInfo.pixelRatio)
|
|
452
|
+
|
|
453
|
+
// 示例 4: 检查基础库版本
|
|
454
|
+
const result = await miniprogram_get_system_info()
|
|
455
|
+
const version = result.systemInfo.SDKVersion
|
|
456
|
+
if (compareVersion(version, "2.10.0") >= 0) {
|
|
457
|
+
console.log("支持新特性")
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### 注意事项
|
|
462
|
+
|
|
463
|
+
- 💡 **devtools 环境**: 开发者工具中 platform 为 `"devtools"`
|
|
464
|
+
- 💡 **版本兼容**: 使用 SDKVersion 判断基础库功能支持
|
|
465
|
+
- 💡 **设备适配**: 使用屏幕尺寸和像素比进行响应式适配
|
|
466
|
+
- 💡 **环境检测**: 通过 platform 区分真机和开发者工具
|
|
467
|
+
|
|
468
|
+
### 相关工具
|
|
469
|
+
|
|
470
|
+
- [`snapshot_full`](./snapshot.md#snapshot_full) - 完整应用快照(包含系统信息)
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
## 完整示例:页面导航和验证
|
|
475
|
+
|
|
476
|
+
```javascript
|
|
477
|
+
// 完整的导航和验证流程
|
|
478
|
+
async function navigateAndVerify() {
|
|
479
|
+
try {
|
|
480
|
+
// 1. 获取当前页面栈
|
|
481
|
+
const stackBefore = await miniprogram_get_page_stack()
|
|
482
|
+
console.log("导航前页面栈深度:", stackBefore.pages.length)
|
|
483
|
+
|
|
484
|
+
// 2. 导航到商品列表页
|
|
485
|
+
await miniprogram_navigate({
|
|
486
|
+
method: "navigateTo",
|
|
487
|
+
url: "/pages/product/list?category=electronics"
|
|
488
|
+
})
|
|
489
|
+
console.log("✅ 已导航到商品列表页")
|
|
490
|
+
|
|
491
|
+
// 3. 等待页面加载完成
|
|
492
|
+
await page_wait_for({ condition: ".product-item" })
|
|
493
|
+
console.log("✅ 页面加载完成")
|
|
494
|
+
|
|
495
|
+
// 4. 验证页面栈
|
|
496
|
+
const stackAfter = await miniprogram_get_page_stack()
|
|
497
|
+
console.log("导航后页面栈深度:", stackAfter.pages.length)
|
|
498
|
+
|
|
499
|
+
const currentPage = stackAfter.pages[stackAfter.pages.length - 1]
|
|
500
|
+
console.log("当前页面:", currentPage.path)
|
|
501
|
+
console.log("查询参数:", currentPage.query)
|
|
502
|
+
|
|
503
|
+
// 5. 截图保存
|
|
504
|
+
await miniprogram_screenshot({
|
|
505
|
+
filename: "product-list.png"
|
|
506
|
+
})
|
|
507
|
+
console.log("✅ 截图已保存")
|
|
508
|
+
|
|
509
|
+
} catch (error) {
|
|
510
|
+
console.error("❌ 操作失败:", error.message)
|
|
511
|
+
// 失败时也截图
|
|
512
|
+
await miniprogram_screenshot({ filename: "error-screenshot.png" })
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
---
|
|
518
|
+
|
|
519
|
+
## 故障排除
|
|
520
|
+
|
|
521
|
+
### 问题 1: 导航失败
|
|
522
|
+
|
|
523
|
+
**错误**: `Navigation failed: ...`
|
|
524
|
+
|
|
525
|
+
**解决方案**:
|
|
526
|
+
1. 检查页面路径是否正确(必须以 `/` 开头)
|
|
527
|
+
2. 检查页面是否在 `app.json` 中注册
|
|
528
|
+
3. switchTab 只能跳转到 tabBar 页面
|
|
529
|
+
4. navigateTo 页面栈最多 10 层
|
|
530
|
+
|
|
531
|
+
### 问题 2: wx API 调用失败
|
|
532
|
+
|
|
533
|
+
**错误**: `wx.{method} call failed: ...`
|
|
534
|
+
|
|
535
|
+
**解决方案**:
|
|
536
|
+
1. 检查 API 名称是否正确(不含 `wx.` 前缀)
|
|
537
|
+
2. 检查权限配置(`app.json` 中的 `permission`)
|
|
538
|
+
3. 检查参数格式是否正确
|
|
539
|
+
4. 某些 API 只能在真机运行
|
|
540
|
+
|
|
541
|
+
### 问题 3: 截图为空或失败
|
|
542
|
+
|
|
543
|
+
**错误**: `Screenshot failed: ...`
|
|
544
|
+
|
|
545
|
+
**解决方案**:
|
|
546
|
+
1. 检查 OutputManager 是否配置
|
|
547
|
+
2. 检查输出目录权限
|
|
548
|
+
3. 等待页面渲染完成后再截图
|
|
549
|
+
4. fullPage 模式可能在某些情况下不可用
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
**相关文档**:
|
|
554
|
+
- [Automator API](./automator.md) - 连接管理
|
|
555
|
+
- [Page API](./page.md) - 页面操作
|
|
556
|
+
- [Snapshot API](./snapshot.md) - 状态快照
|
|
557
|
+
|
|
558
|
+
**最后更新**: 2025-10-02
|