android-midscene-automation 0.1.13 → 0.1.14
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/CHANGELOG.md +30 -0
- package/README.md +39 -51
- package/USAGE.md +1018 -0
- package/package.json +2 -1
- package/server/android-sdk.ts +104 -0
- package/server/appium-recorder/appium-runner.ts +144 -35
- package/server/appium-recorder/report.ts +138 -0
- package/server/appium-recorder/repository.ts +78 -0
- package/server/appium-recorder/routes.ts +141 -14
- package/server/config.ts +12 -0
- package/server/http-api.ts +9 -6
- package/src/App.vue +23 -23
- package/src/appium-recorder/AppiumPage.vue +403 -38
- package/src/appium-recorder/api.ts +62 -5
- package/src/appium-recorder/components/FlowStepEditor.vue +175 -0
- package/src/appium-recorder/components/RecordedSteps.vue +514 -277
- package/src/appium-recorder/types.ts +2 -0
- package/src/pages/ConfigPage.vue +28 -0
- package/src/style.css +162 -89
- package/src/types.ts +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# 更新记录
|
|
2
2
|
|
|
3
|
+
## v0.1.14
|
|
4
|
+
|
|
5
|
+
- 参数配置新增 Android SDK 路径和 Appium 回放报告目录;留空时分别读取系统默认 SDK 和启动目录下的 `output`。
|
|
6
|
+
- Appium 回放前新增 Android SDK 检测,并让设备列表、预览、组件树、设备操作和回放统一使用配置的 SDK 中的 ADB。
|
|
7
|
+
- Appium 回放结束后自动在 `output` 目录生成 Markdown 报告,记录每个节点的配置、执行状态与完整回放日志,并将报告路径保存到数据库。
|
|
8
|
+
- Appium 脚本列表新增 JSON 脚本导入和下载功能;导入重名脚本时自动生成新名称。
|
|
9
|
+
- Appium 回放修复分支内末尾连接脚本被误当成全局连接执行的问题;连接脚本前会等待目标 Activity,减少页面切换尚未完成造成的误报。
|
|
10
|
+
- Appium 判断节点的模糊文本匹配会统一换行和连续空白,避免录制文本与 Appium 返回文本仅因排版差异而误判为不存在。
|
|
11
|
+
- Appium 设备预览恢复复用 Midscene Playground 的 scrcpy 实时流;仅在实时流不可用时启用 ADB 截图轮询,避免停帧和两种预览源相互覆盖。
|
|
12
|
+
- Playground 代理补充 action-space 和 execute 路径,修复嵌入式设备预览初始化时的 404 错误。
|
|
13
|
+
- Appium 组件树在当前 Activity 或页面结构变化后自动刷新,保留仍存在的已选节点,并避免与录制、回放和手动刷新并发。
|
|
14
|
+
- Appium 回放与组件树的 `uiautomator dump` 按设备互斥:回放前等待正在进行的抓取结束,回放期间暂停新抓取,并在 `UiAutomation not connected` 时清理残留进程后自动重试一次。
|
|
15
|
+
- Appium 判断分支中的连接脚本允许选择同一 App 的其他 Activity 脚本;回放到连接节点时等待目标入口 Activity,未真正跳转则超时失败。
|
|
16
|
+
- Appium 回放输出改为 NDJSON 流式传输,节点开始、结果、完成、失败和报告路径会在执行过程中实时追加到回放日志。
|
|
17
|
+
- Appium 线性脚本和流程图脚本的回放日志统一使用“[节点 N]”编号,不再混用“步骤”和“节点”。
|
|
18
|
+
- Appium 判断分支后的主流程节点按实际前驱分支定位:单分支连接时沿该分支中轴继续排列,双分支汇合时回到中轴,后续线性节点继承前一节点位置。
|
|
19
|
+
- Appium 流程节点新增备注字段,可在节点配置中编辑,并显示在操作描述下方。
|
|
20
|
+
- 浏览器刷新后保持当前功能页面和 Appium 工作区 Tab;Appium 录制存在未保存修改时,刷新或关闭页面前显示保存提醒。
|
|
21
|
+
- Appium 模块:“启动 APP”流程节点新增立即执行操作,可从系统桌面直接启动当前预设应用,并在刷新 Activity 后自动解除匹配页面的编辑锁定。
|
|
22
|
+
- Appium 模块:Activity 不匹配时仍可使用开始节点和步骤节点的插入菜单;“启动 APP”仅保留在开始节点,普通节点提供其余操作。
|
|
23
|
+
- Appium 模块:回放前检测目标 App 是否已在前台;已启动时关闭 Appium 自动拉起并跳过“启动 APP”节点,保留当前页面状态。
|
|
24
|
+
- Appium 模块:判断节点移除后续节点下拉配置,是/否分支改为通过“连接下一节点”按钮自动连接判断后的主流程节点。
|
|
25
|
+
- Appium 模块:“判断存在”支持按指定文本判断,可选择模糊匹配或精准匹配。
|
|
26
|
+
- Appium 模块:判断节点的配置面板移动到当前节点正下方,不再显示在分支子节点末尾。
|
|
27
|
+
- Appium 模块:分支子节点支持点击展开配置,节点尺寸与主流程节点保持一致。
|
|
28
|
+
- Appium 模块:流程总览弹窗支持点击主流程和分支节点并直接修改配置。
|
|
29
|
+
- Appium 模块:节点配置面板移除重复的“插入延时”按钮,延时统一从流程“插入操作”菜单添加。
|
|
30
|
+
- Appium 模块:三列工作区比例调整为 3:3:4,缩小组件树区域并扩大录制与脚本区域。
|
|
31
|
+
- Appium 模块:判断分支连接后使用流程线连接后续主节点,连接按钮切换为“取消连接”并支持解除连线。
|
|
32
|
+
|
|
3
33
|
## v0.1.13
|
|
4
34
|
|
|
5
35
|
- Appium 模块:修复加载历史脚本并新增节点后被误判为新脚本、无法覆盖保存的问题。
|
package/README.md
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
# Android Midscene Automation
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
一个面向 Android App 的自动化测试工具,同时支持 Midscene AI 测试和 Appium 组件树录制回放。
|
|
4
|
+
|
|
5
|
+
## 支持的测试方式
|
|
6
|
+
|
|
7
|
+
| 测试方式 | 页面入口 | 工作方式 | 模型要求 | 适用场景 |
|
|
8
|
+
| --- | --- | --- | --- | --- |
|
|
9
|
+
| Midscene | `Midscene > 测试脚本生成 / 自动化测试` | 使用自然语言生成和执行测试脚本,通过多模态模型理解设备画面 | **必须配置模型** | 页面元素难以稳定定位、希望使用自然语言快速编写测试 |
|
|
10
|
+
| Appium | `Appium` | 读取 Android 组件树,按 selector、组件 ID 和流程图录制、回放 | **不需要配置任何模型** | 需要稳定、可重复、无模型消耗的传统自动化测试 |
|
|
11
|
+
|
|
12
|
+
使用 Midscene 前,请先进入“参数配置”完成 `Midscene 模型` 配置;需要 AI 生成脚本时,还要配置 `脚本优化模型`。模型配置不可用时,Midscene 脚本无法正常生成或执行。
|
|
13
|
+
|
|
14
|
+
Appium 方案完全不依赖大模型,不需要填写 Base URL、API Key、Model Name 等模型参数。使用前只需连接 Android 设备、准备 Android SDK / ADB,并启动 Appium 服务。
|
|
4
15
|
|
|
5
16
|
## 环境要求
|
|
6
17
|
|
|
@@ -9,7 +20,7 @@
|
|
|
9
20
|
- Android SDK / ADB,移动端自动化测试需要
|
|
10
21
|
- Playwright Chromium,Web 示例脚本需要
|
|
11
22
|
|
|
12
|
-
##
|
|
23
|
+
## 启动
|
|
13
24
|
|
|
14
25
|
```sh
|
|
15
26
|
npx android-midscene-automation
|
|
@@ -21,12 +32,6 @@ npx android-midscene-automation
|
|
|
21
32
|
http://127.0.0.1:5173/
|
|
22
33
|
```
|
|
23
34
|
|
|
24
|
-
如果还没有发布到 npm,也可以用 GitHub 地址运行:
|
|
25
|
-
|
|
26
|
-
```sh
|
|
27
|
-
npx github:你的组织/你的仓库
|
|
28
|
-
```
|
|
29
|
-
|
|
30
35
|
每个测试人员在自己的电脑运行这条命令,后端执行的就是当前电脑上的 `adb devices`,页面会识别当前电脑连接的手机。
|
|
31
36
|
|
|
32
37
|
如果 `5173` 端口被占用,可以指定端口:
|
|
@@ -35,6 +40,11 @@ npx github:你的组织/你的仓库
|
|
|
35
40
|
npx android-midscene-automation --port 5174
|
|
36
41
|
```
|
|
37
42
|
|
|
43
|
+
## 功能文档
|
|
44
|
+
|
|
45
|
+
- [Appium 录制器使用说明](https://cdn.jsdelivr.net/npm/android-midscene-automation@latest/USAGE.md)
|
|
46
|
+
- [项目更新记录](https://cdn.jsdelivr.net/npm/android-midscene-automation@latest/CHANGELOG.md)
|
|
47
|
+
|
|
38
48
|
## 源码开发
|
|
39
49
|
|
|
40
50
|
```sh
|
|
@@ -64,8 +74,9 @@ http://127.0.0.1:5173/
|
|
|
64
74
|
|
|
65
75
|
## 模型配置
|
|
66
76
|
|
|
67
|
-
|
|
77
|
+
模型配置仅用于 Midscene 和 AI 脚本生成,Appium 录制与回放不读取模型配置。首次使用 Midscene 时进入页面的“参数配置”:
|
|
68
78
|
|
|
79
|
+
- `运行配置`:可选指定 Android SDK 根目录和 Appium 回放报告目录;留空时使用系统 SDK 与默认 `output` 目录。
|
|
69
80
|
- `Midscene模型`:执行测试脚本时使用,支持“自定义提供方”和“使用 Codex”。
|
|
70
81
|
- `AI生成脚本模型`:根据测试需求生成脚本时使用。
|
|
71
82
|
|
|
@@ -77,28 +88,6 @@ http://127.0.0.1:5173/
|
|
|
77
88
|
|
|
78
89
|
旧版 `config.yaml` 或 `config.json` 会在读取后迁移到数据库。当前运行时会优先读取数据库中的模型配置。
|
|
79
90
|
|
|
80
|
-
## 后端说明
|
|
81
|
-
|
|
82
|
-
本项目的本地后端位于 `server/http-api.ts`,通过 `/api/*` 暴露能力,主要包括:
|
|
83
|
-
|
|
84
|
-
- 脚本生成:`POST /api/generate`
|
|
85
|
-
- 脚本保存和列表:`POST /api/save-script`、`GET /api/scripts`
|
|
86
|
-
- 脚本执行和停止:`POST /api/run-script`、`POST /api/stop-script`
|
|
87
|
-
- 模型配置:`GET /api/config`、`POST /api/config`
|
|
88
|
-
- 模型测试和消耗统计:`POST /api/test-model`、`GET /api/model-usage-records`
|
|
89
|
-
- Android 设备:`GET /api/android-devices`、`POST /api/android-device`
|
|
90
|
-
- Android 预览和操作:`GET /api/android-preview`、`POST /api/android-tap`、`POST /api/android-swipe`、`POST /api/android-keyevent`
|
|
91
|
-
- App 预设:`GET /api/app-presets`、`POST /api/save-app-preset`、`POST /api/delete-app-preset`
|
|
92
|
-
|
|
93
|
-
后端运行态文件默认都在项目根目录下:
|
|
94
|
-
|
|
95
|
-
```text
|
|
96
|
-
.midscene-app/ # SQLite 数据库
|
|
97
|
-
.midscene-generated/ # 执行前生成的临时脚本
|
|
98
|
-
scripts-output/ # 保存的脚本输出
|
|
99
|
-
midscene_run/ # Midscene 执行报告和运行产物
|
|
100
|
-
```
|
|
101
|
-
|
|
102
91
|
## Android 自动化
|
|
103
92
|
|
|
104
93
|
执行移动端脚本前确认设备已连接:
|
|
@@ -107,9 +96,9 @@ midscene_run/ # Midscene 执行报告和运行产物
|
|
|
107
96
|
adb devices -l
|
|
108
97
|
```
|
|
109
98
|
|
|
110
|
-
页面会通过 `/api/android-devices`
|
|
99
|
+
页面会通过 `/api/android-devices` 获取设备列表。Midscene 执行时由 `@midscene/android` 连接设备并运行生成脚本;Appium 执行时使用组件树和已录制的流程,不调用大模型。
|
|
111
100
|
|
|
112
|
-
如果要走不依赖大模型的 Appium
|
|
101
|
+
如果要走不依赖大模型的 Appium 组件树录制方案,可查看项目的 Appium 录制器使用说明。
|
|
113
102
|
|
|
114
103
|
如果测试人员需要识别自己电脑上的手机,推荐每个人在自己的电脑本地运行:
|
|
115
104
|
|
|
@@ -131,26 +120,25 @@ http://localhost:5173/
|
|
|
131
120
|
appium
|
|
132
121
|
```
|
|
133
122
|
|
|
134
|
-
##
|
|
135
|
-
|
|
136
|
-
- [项目更新记录](https://cdn.jsdelivr.net/npm/android-midscene-automation@latest/CHANGELOG.md)
|
|
137
|
-
|
|
138
|
-
## 运行 E2E 测试
|
|
139
|
-
|
|
140
|
-
```sh
|
|
141
|
-
npm run test:e2e
|
|
142
|
-
```
|
|
123
|
+
## 后端说明
|
|
143
124
|
|
|
144
|
-
|
|
125
|
+
本项目的本地后端位于 `server/http-api.ts`,通过 `/api/*` 暴露能力,主要包括:
|
|
145
126
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
127
|
+
- 脚本生成:`POST /api/generate`
|
|
128
|
+
- 脚本保存和列表:`POST /api/save-script`、`GET /api/scripts`
|
|
129
|
+
- 脚本执行和停止:`POST /api/run-script`、`POST /api/stop-script`
|
|
130
|
+
- 模型配置:`GET /api/config`、`POST /api/config`
|
|
131
|
+
- 模型测试和消耗统计:`POST /api/test-model`、`GET /api/model-usage-records`
|
|
132
|
+
- Android 设备:`GET /api/android-devices`、`POST /api/android-device`
|
|
133
|
+
- Android 预览和操作:`GET /api/android-preview`、`POST /api/android-tap`、`POST /api/android-swipe`、`POST /api/android-keyevent`
|
|
134
|
+
- App 预设:`GET /api/app-presets`、`POST /api/save-app-preset`、`POST /api/delete-app-preset`
|
|
149
135
|
|
|
150
|
-
|
|
136
|
+
后端运行态文件默认都在项目根目录下:
|
|
151
137
|
|
|
152
|
-
```
|
|
153
|
-
|
|
138
|
+
```text
|
|
139
|
+
.midscene-app/ # SQLite 数据库
|
|
140
|
+
.midscene-generated/ # 执行前生成的临时脚本
|
|
141
|
+
scripts-output/ # 保存的脚本输出
|
|
142
|
+
output/ # Appium 回放 Markdown 报告(可在运行配置中修改)
|
|
143
|
+
midscene_run/ # Midscene 执行报告和运行产物
|
|
154
144
|
```
|
|
155
|
-
|
|
156
|
-
`npm run preview` 同样会挂载 `/api/*` 后端 middleware。
|