midscene 项目

大模型 UI 自动化测试项目文档

 

项目:AI_AUTO_TEST

测试对象:闪电 AI / 斑马百科安卓端

框架:Midscene 视觉大模型框架

模型:Qwen3VLFlash

 

 

 

一、项目概述

1.1 项目介绍

本项目是基于Midscene 视觉大模型框架的 UI 自动化测试解决方案,用于对「闪电 AI」自动化回归测试。

 

核心优势:

无需控件树:直接通过截图识别 UI 元素

自然语言驱动:用人类语言描述测试步骤

智能缓存:二次运行显著提速,降低成本

全自动化:测试 → 报告 → 邮件通知一键完成

 

1.2 技术架构

测试脚本 (YAML) → Midscene CLI → 视觉大模型 (Qwen3VL) → ADB 执行 → 生成报告 → 邮件通知

 

二、Midscene 框架介绍

2.1 什么是 Midscene

Midscene 是基于「视觉多模态大模型 + 自然语言描述」的 UI 自动化框架。与 Appium/UIAutomator 不同,不依赖控件树,而是让视觉大模型直接「看截图 → 理解画面 → 规划动作」。

 

工作原理:

1. 截取当前屏幕

2. 将截图发送给视觉大模型

3. 模型理解画面并定位目标元素

4. 生成具体坐标或操作指令

5. 通过 ADB 执行动作

 

2.2 核心 YAML 指令

| 指令 | 功能 | 示例 |

| `ai` / `aiAct` | 自由形式自然语言操作 | 「在输入框中输入『今天天气怎么样』」 |

| `aiTap` | 精准点击某个元素 | 「顶部当前可见的返回按钮」 |

| `aiInput` | 文本输入 | 向输入框填入问题 |

| `aiKeyboardPress` | 键盘按键 | 按 Enter 发送 |

| `aiScroll` | 纵向滚动指定区域 | 分段滑动列表 |

| `aiWaitFor` | 自然语言等待条件 | 等待 AI 回复的气泡出现 |

| `aiAssert` | 自然语言断言 | 「卡片上方出现『节选自』文字」 |

| `sleep` | 等待指定时间 | `sleep: 2000` (2秒) |

| `launch` | 启动 App | `launch: com.fenbi.android.pedia` |

 

⚠️ 重要提示: 报告中的「断言明细」只来自带 `name``aiAssert``aiWaitFor` 超时不会写入 JSON 断言。

 

2.3 使用的大模型

配置文件:`.env`

MIDSCENE_MODEL_BASE_URL="https://conanaiplatform.zhenguanyu.com/litellm/"

MIDSCENE_MODEL_API_KEY="sk*"

MIDSCENE_MODEL_NAME="qwen3vlflash"

MIDSCENE_MODEL_FAMILY="qwen3vl"

 

 

使用公司内部LiteLLM 网关统一代理

当前主用Qwen3VLFlash(视觉多模态模型)

截图缩小到 30%(`screenshotResizeScale: 0.3`),降低 token 成本并提高响应速度

 

三、项目目录结构

AI_AUTO_TEST/

├── README.md 快速上手指南

├── .env 大模型网关/Key/模型名配置

├── IntoApp.yaml 「进入 App」前置流程

├── ShanDiantest.yaml 【测试环境】闪电 AI 回归测试主脚本

├── ShanDian.yaml 【线上环境】闪电 AI 回归测试主脚本

├── test.yaml 小流程验证用

├── scripts/ 编排脚本

│ ├── run_yaml_then_report_then_email.sh 【核心】一键编排

│ ├── run_yaml_by_task_name.py 按 tasks[].name 子集跑

│ ├── generate_midscene_email_report.py 生成 HTML 简报

│ └── send_midscene_report_email.py 发邮件

└── midscene_run/ Midscene 运行时产物

├── cache/ 视觉定位缓存

├── output/ summary*.json + 断言明细

├── report/ Midscene 原生完整 HTML 报告

├── log/ 细分日志

└── latesttestreport.html 【发送邮件 HTML 简报】

 

 

四、缓存机制详解

4.1 缓存的作用

加速二次运行:首次运行后,后续运行直接使用缓存的定位方案

💰降低成本:减少大模型调用次数

📊提高稳定性:避免模型理解偏差导致的抖动

 

4.2 缓存配置

在 YAML 顶部配置:

yaml

agent:

cache:

id: "shandiantestcache"

strategy: "readwrite"

 

 

单个指令控制:

yaml

aiTap: 顶部的搜索框

cacheable: false 不使用缓存,每次都调用大模型

 

 

4.3 缓存文件

缓存存储在 `midscene_run/cache/*.cache.yaml`,格式示例:

 

yaml

step: 1

instruction: "顶部的搜索框"

result:

x: 360

y: 120

 

 

建议:

✅ 固定 UI 元素使用缓存(如顶栏按钮)

❌ 动态内容不使用缓存(如弹窗、活动提示)

 

五、测试用例编写指南

5.1 YAML 脚本结构

yaml

android:

deviceId: emulator5554 设备 ID

launch: com.fenbi.android.pedia App 包名

screenshotResizeScale: 0.3 截图缩小到 30%

 

agent:

cache:

id: "testcache"

strategy: "readwrite"

 

tasks:

name: 任务名称

continueOnError: false 失败是否继续

flow:

aiTap: 顶部的搜索框

aiInput: 今天天气怎么样

aiKeyboardPress: Enter

aiWaitFor: 页面加载完成,显示回复内容

timeout: 15000

aiAssert: 回复内容包含天气信息

 

 

5.2 典型场景示例

 

场景 1:处理弹窗

yaml

name: 首页可选关闭遮挡弹窗

continueOnError: false

flow:

ai: 若在屏幕下面有弹窗,若仅有右上角小「X」,点击「X」。若当前没有遮挡弹窗,不要点击。

cacheable: false

 

 

场景 2:权限申请

yaml

name: 录音可选允许弹窗

flow:

ai: 先根据当前截图判断是否出现系统权限类弹窗。仅当确实存在此类弹窗且上面有「允许」「同意」等按钮时,再点击;若没有权限弹窗,则不要执行任何点击。

cacheable: false

 

 

场景 3:滚动查找

yaml

name: 向下滑动寻找目标

flow:

aiScroll:

direction: down

distance: medium

aiWaitFor: 找到目标元素

 

 

5.3 按任务名筛选执行

 

使用 `run_yaml_by_task_name.py` 只运行指定任务:

 

bash

单个任务

python3 scripts/run_yaml_by_task_name.py ShanDian.yaml "断言录音弹窗"

 

多个任务(任一匹配即选中,按顺序执行)

python3 scripts/run_yaml_by_task_name.py ShanDian.yaml "录音 输入"

 

六、测试报告生成

6.1 Midscene 原生报告

位置:`midscene_run/report/midscenexxx.html`

完整的 HTML 报告(单文件几百 MB)

包含所有截图、日志、调用链

适合详细排查问题

 

6.2 精简 HTML 简报

位置:`midscene_run/latesttestreport.html`

`generate_midscene_email_report.py` 自动生成,包含:

报告内容:

📊 测试概览(通过率、耗时、模型信息)

✅ 断言明细表格(名称、结果、耗时)

❌ 失败原因分析(日志片段)

📝 最后执行步骤(便于定位中断位置)

 

七、邮件通知系统

如下截图:

数据来源:

`midscene_run/output/summary*.json` 测试概览

`midscene_run/output/<脚本><时间戳>.json` 断言明细

`midscene_run/log/yamlplayer.log` 执行流程

`midscene_run/log/aicall.log` AI 调用记录

 

手动生成报告:

python3 scripts/generate_midscene_email_report.py

 

手动发送邮件:

python3 scripts/send_midscene_report_email.py

 

八、一键编排脚本

8.1 核心脚本:run_yaml_then_report_then_email.sh

 

完整流程:

1. ✅ 进入 App(IntoApp.yaml)

2. ✅ 执行主测试(ShanDiantest.yaml)

3. ✅ 生成测试报告

4. ✅ 发送邮件通知

 

用法:

bash

基础用法(使用默认配置)

./scripts/run_yaml_then_report_then_email.sh

 

指定测试脚本

./scripts/run_yaml_then_report_then_email.sh ShanDiantest.yaml

 

跳过「进入 App」步骤(调试用)

SKIP_INTO_APP=1 ./scripts/run_yaml_then_report_then_email.sh ShanDiantest.yaml

 

 

8.2 Jenkins 集成

在 Jenkins 中创建 Shell 构建步骤:

 

bash

!/bin/bash

cd /path/to/AI_AUTO_TEST

 

设置环境变量

export MIDSCENE_CMD="npx midscene"

 

执行测试

./scripts/run_yaml_then_report_then_email.sh ShanDiantest.yaml

 

九、日志系统

9.1 日志文件分类

| 日志文件 | 内容 | 用途 |

| `yamlplayer.log` | 执行流程日志 | 定位最后执行步骤、查看任务顺序 |

| `aicall.log` | AI 调用日志 | 查看模型调用次数、token 消耗 |

| 其他日志 | 细分日志(agent、debug 等) | 深度调试 |

 

9.2 查看最后执行步骤

当测试中断时,查看 `yamlplayer.log` 最后的 `playing step` 日志:

playing step 12, flowItem={"aiTap": "底部右侧的键盘切换图标"}

这帮助快速定位中断位置。

 

9.3 AI 调用统计

查看 `aicall.log` 统计大模型调用次数和 token 消耗,优化测试脚本。

 

十、环境配置

10.1 依赖安装

Node.js 环境:

bash

npm install  @midscene/cli

npm install @midscene/android

 

 

Python 环境:

bash

pip install pyyaml

 

 

Android 工具:

安装 ADB

安装 Android SDK

 

10.2 设备配置

Android 模拟器:

bash

启动模拟器

emulator avd <模拟器名称>

 

查看设备 ID

adb devices

 

在 YAML 中配置

android:

deviceId: emulator5554

 

 

真机连接:

bash

启用 USB 调试

连接设备后查看 ID

adb devices

 

配置设备 ID

android:

deviceId: <真机ID>

 

 

10.3 模型配置

编辑 `.env` 文件:

bash

MIDSCENE_MODEL_BASE_URL="https://conanaiplatform.zhenguanyu.com/litellm/"

MIDSCENE_MODEL_API_KEY="skyourapikey"

MIDSCENE_MODEL_NAME="qwen3vlflash"

MIDSCENE_MODEL_FAMILY="qwen3vl"

 

 

切换模型(如 Doubao Seed):

bash

注释当前模型,取消注释目标模型

MIDSCENE_MODEL_NAME="qwen3vlflash"

MIDSCENE_MODEL_NAME="doubaoseed2.0pro260215"

MIDSCENE_MODEL_FAMILY="doubaoseed"

 

十一、最佳实践

11.1 测试用例编写建议

合理使用缓存

固定 UI 元素(如顶栏按钮)使用缓存

动态内容(如弹窗)设置 `cacheable: false`

 

错误容忍策略

弹窗处理设置 `continueOnError: false`

关键流程失败应立即停止

 

自然语言描述技巧

描述清晰具体:「顶部当前可见的返回按钮」比「返回按钮」更准确

包含条件判断:「若有弹窗则点击,没有则不操作」

 

11.2 性能优化

截图缩放

yaml

screenshotResizeScale: 0.3 降低到 30%,加快响应速度

 

 

减少不必要的 AI 调用

使用 `sleep` 代替简单等待

固定延迟用 `runAdbShell` 直接执行 ADB 命令

 

缓存策略优化

首次运行后检查缓存命中率

调整 `cacheable` 配置

 

11.3 稳定性提升

🛡️弹窗处理

多次重复处理弹窗(避免遗漏)

使用条件判断(「若有则点击,没有则不操作」)

 

🛡️超时时间设置

yaml

aiWaitFor: 页面加载完成

timeout: 15000 根据实际情况调整

 

 

🛡️分段验证

将长流程拆分为多个 task

每个 task 添加明确的 `name`

 

十二、常见问题

12.1 Midscene 相关

 

Q: 元素定位失败怎么办?

检查自然语言描述是否准确

查看当前截图,确认元素可见

尝试设置 `cacheable: false` 重新识别

 

Q: AI 理解错误?

优化自然语言描述,添加更多上下文

检查截图是否清晰(缩放比例是否合适)

考虑切换模型(Qwen3VL ↔ Doubao Seed)

 

Q: 超时问题?

增加 `timeout` 时间

检查网络连接

确认设备性能正常

 

12.2 设备相关

Q: ADB 连接失败?

bash

重启 ADB 服务

adb killserver

adb startserver

 

检查设备连接

adb devices

 

 

Q: App 启动失败?

确认包名正确

检查 App 是否已安装

查看设备存储空间

 

12.3 报告与邮件

 

Q: 报告生成失败?

检查 `midscene_run/output/` 目录下是否有 `summary*.json`

查看 Python 脚本执行日志

 

Q: 邮件发送失败(535 authentication failed)?

确认使用的是「客户端专用密码」,不是网页登录密码

检查企业邮箱是否开启了 SMTP 功能

等待几分钟后重试(可能是服务器繁忙)

 

Q: 附件过大发送失败?

设置 `ATTACH_MIDSCENE_REPORT = False` 不发送附件

只发送精简 HTML 简报

 

 

 

附录

 

A. 常用命令速查

 

bash

安装依赖

npm install @midscene/android savedev

pip install pyyaml

 

运行测试

midscene ShanDiantest.yaml

 

按任务名筛选

python3 scripts/run_yaml_by_task_name.py ShanDian.yaml "录音"

 

一键执行

./scripts/run_yaml_then_report_then_email.sh

 

生成报告

python3 scripts/generate_midscene_email_report.py

 

发送邮件

python3 scripts/send_midscene_report_email.py

 

查看设备

adb devices

 

重启 ADB

adb killserver && adb startserver

 

 

B. 相关链接

 

Midscene 官方文档https://midscenejs.com/

测试用例集https://capas.zhenguanyu.com//cases/edit/19177

项目路径`/Users/kanyun/.jenkins/workspace/自动化测试/AI_AUTO_TEST`

 

 

大模型 UI 自动化测试项目文档

 

项目:AI_AUTO_TEST

测试对象:闪电 AI / 斑马百科安卓端

框架:Midscene 视觉大模型框架

模型:Qwen3VLFlash

 

 

 

一、项目概述

1.1 项目介绍

本项目是基于Midscene 视觉大模型框架的 UI 自动化测试解决方案,用于对「闪电 AI」自动化回归测试。

 

核心优势:

无需控件树:直接通过截图识别 UI 元素

自然语言驱动:用人类语言描述测试步骤

智能缓存:二次运行显著提速,降低成本

全自动化:测试 → 报告 → 邮件通知一键完成

 

1.2 技术架构

测试脚本 (YAML) → Midscene CLI → 视觉大模型 (Qwen3VL) → ADB 执行 → 生成报告 → 邮件通知

 

二、Midscene 框架介绍

2.1 什么是 Midscene

Midscene 是基于「视觉多模态大模型 + 自然语言描述」的 UI 自动化框架。与 Appium/UIAutomator 不同,不依赖控件树,而是让视觉大模型直接「看截图 → 理解画面 → 规划动作」。

 

工作原理:

1. 截取当前屏幕

2. 将截图发送给视觉大模型

3. 模型理解画面并定位目标元素

4. 生成具体坐标或操作指令

5. 通过 ADB 执行动作

 

2.2 核心 YAML 指令

| 指令 | 功能 | 示例 |

| `ai` / `aiAct` | 自由形式自然语言操作 | 「在输入框中输入『今天天气怎么样』」 |

| `aiTap` | 精准点击某个元素 | 「顶部当前可见的返回按钮」 |

| `aiInput` | 文本输入 | 向输入框填入问题 |

| `aiKeyboardPress` | 键盘按键 | 按 Enter 发送 |

| `aiScroll` | 纵向滚动指定区域 | 分段滑动列表 |

| `aiWaitFor` | 自然语言等待条件 | 等待 AI 回复的气泡出现 |

| `aiAssert` | 自然语言断言 | 「卡片上方出现『节选自』文字」 |

| `sleep` | 等待指定时间 | `sleep: 2000` (2秒) |

| `launch` | 启动 App | `launch: com.fenbi.android.pedia` |

 

⚠️ 重要提示: 报告中的「断言明细」只来自带 `name``aiAssert``aiWaitFor` 超时不会写入 JSON 断言。

 

2.3 使用的大模型

配置文件:`.env`

MIDSCENE_MODEL_BASE_URL="https://conanaiplatform.zhenguanyu.com/litellm/"

MIDSCENE_MODEL_API_KEY="sk*"

MIDSCENE_MODEL_NAME="qwen3vlflash"

MIDSCENE_MODEL_FAMILY="qwen3vl"

 

 

使用公司内部LiteLLM 网关统一代理

当前主用Qwen3VLFlash(视觉多模态模型)

截图缩小到 30%(`screenshotResizeScale: 0.3`),降低 token 成本并提高响应速度

 

三、项目目录结构

AI_AUTO_TEST/

├── README.md 快速上手指南

├── .env 大模型网关/Key/模型名配置

├── IntoApp.yaml 「进入 App」前置流程

├── ShanDiantest.yaml 【测试环境】闪电 AI 回归测试主脚本

├── ShanDian.yaml 【线上环境】闪电 AI 回归测试主脚本

├── test.yaml 小流程验证用

├── scripts/ 编排脚本

│ ├── run_yaml_then_report_then_email.sh 【核心】一键编排

│ ├── run_yaml_by_task_name.py 按 tasks[].name 子集跑

│ ├── generate_midscene_email_report.py 生成 HTML 简报

│ └── send_midscene_report_email.py 发邮件

└── midscene_run/ Midscene 运行时产物

├── cache/ 视觉定位缓存

├── output/ summary*.json + 断言明细

├── report/ Midscene 原生完整 HTML 报告

├── log/ 细分日志

└── latesttestreport.html 【发送邮件 HTML 简报】

 

 

四、缓存机制详解

4.1 缓存的作用

加速二次运行:首次运行后,后续运行直接使用缓存的定位方案

💰降低成本:减少大模型调用次数

📊提高稳定性:避免模型理解偏差导致的抖动

 

4.2 缓存配置

在 YAML 顶部配置:

yaml

agent:

cache:

id: "shandiantestcache"

strategy: "readwrite"

 

 

单个指令控制:

yaml

aiTap: 顶部的搜索框

cacheable: false 不使用缓存,每次都调用大模型

 

 

4.3 缓存文件

缓存存储在 `midscene_run/cache/*.cache.yaml`,格式示例:

 

yaml

step: 1

instruction: "顶部的搜索框"

result:

x: 360

y: 120

 

 

建议:

✅ 固定 UI 元素使用缓存(如顶栏按钮)

❌ 动态内容不使用缓存(如弹窗、活动提示)

 

五、测试用例编写指南

5.1 YAML 脚本结构

yaml

android:

deviceId: emulator5554 设备 ID

launch: com.fenbi.android.pedia App 包名

screenshotResizeScale: 0.3 截图缩小到 30%

 

agent:

cache:

id: "testcache"

strategy: "readwrite"

 

tasks:

name: 任务名称

continueOnError: false 失败是否继续

flow:

aiTap: 顶部的搜索框

aiInput: 今天天气怎么样

aiKeyboardPress: Enter

aiWaitFor: 页面加载完成,显示回复内容

timeout: 15000

aiAssert: 回复内容包含天气信息

 

 

5.2 典型场景示例

 

场景 1:处理弹窗

yaml

name: 首页可选关闭遮挡弹窗

continueOnError: false

flow:

ai: 若在屏幕下面有弹窗,若仅有右上角小「X」,点击「X」。若当前没有遮挡弹窗,不要点击。

cacheable: false

 

 

场景 2:权限申请

yaml

name: 录音可选允许弹窗

flow:

ai: 先根据当前截图判断是否出现系统权限类弹窗。仅当确实存在此类弹窗且上面有「允许」「同意」等按钮时,再点击;若没有权限弹窗,则不要执行任何点击。

cacheable: false

 

 

场景 3:滚动查找

yaml

name: 向下滑动寻找目标

flow:

aiScroll:

direction: down

distance: medium

aiWaitFor: 找到目标元素

 

 

5.3 按任务名筛选执行

 

使用 `run_yaml_by_task_name.py` 只运行指定任务:

 

bash

单个任务

python3 scripts/run_yaml_by_task_name.py ShanDian.yaml "断言录音弹窗"

 

多个任务(任一匹配即选中,按顺序执行)

python3 scripts/run_yaml_by_task_name.py ShanDian.yaml "录音 输入"

 

六、测试报告生成

6.1 Midscene 原生报告

位置:`midscene_run/report/midscenexxx.html`

完整的 HTML 报告(单文件几百 MB)

包含所有截图、日志、调用链

适合详细排查问题

 

6.2 精简 HTML 简报

位置:`midscene_run/latesttestreport.html`

`generate_midscene_email_report.py` 自动生成,包含:

报告内容:

📊 测试概览(通过率、耗时、模型信息)

✅ 断言明细表格(名称、结果、耗时)

❌ 失败原因分析(日志片段)

📝 最后执行步骤(便于定位中断位置)

 

七、邮件通知系统

如下截图:

数据来源:

`midscene_run/output/summary*.json` 测试概览

`midscene_run/output/<脚本><时间戳>.json` 断言明细

`midscene_run/log/yamlplayer.log` 执行流程

`midscene_run/log/aicall.log` AI 调用记录

 

手动生成报告:

python3 scripts/generate_midscene_email_report.py

 

手动发送邮件:

python3 scripts/send_midscene_report_email.py

 

八、一键编排脚本

8.1 核心脚本:run_yaml_then_report_then_email.sh

 

完整流程:

1. ✅ 进入 App(IntoApp.yaml)

2. ✅ 执行主测试(ShanDiantest.yaml)

3. ✅ 生成测试报告

4. ✅ 发送邮件通知

 

用法:

bash

基础用法(使用默认配置)

./scripts/run_yaml_then_report_then_email.sh

 

指定测试脚本

./scripts/run_yaml_then_report_then_email.sh ShanDiantest.yaml

 

跳过「进入 App」步骤(调试用)

SKIP_INTO_APP=1 ./scripts/run_yaml_then_report_then_email.sh ShanDiantest.yaml

 

 

8.2 Jenkins 集成

在 Jenkins 中创建 Shell 构建步骤:

 

bash

!/bin/bash

cd /path/to/AI_AUTO_TEST

 

设置环境变量

export MIDSCENE_CMD="npx midscene"

 

执行测试

./scripts/run_yaml_then_report_then_email.sh ShanDiantest.yaml

 

九、日志系统

9.1 日志文件分类

| 日志文件 | 内容 | 用途 |

| `yamlplayer.log` | 执行流程日志 | 定位最后执行步骤、查看任务顺序 |

| `aicall.log` | AI 调用日志 | 查看模型调用次数、token 消耗 |

| 其他日志 | 细分日志(agent、debug 等) | 深度调试 |

 

9.2 查看最后执行步骤

当测试中断时,查看 `yamlplayer.log` 最后的 `playing step` 日志:

playing step 12, flowItem={"aiTap": "底部右侧的键盘切换图标"}

这帮助快速定位中断位置。

 

9.3 AI 调用统计

查看 `aicall.log` 统计大模型调用次数和 token 消耗,优化测试脚本。

 

十、环境配置

10.1 依赖安装

Node.js 环境:

bash

npm install  @midscene/cli

npm install @midscene/android

 

 

Python 环境:

bash

pip install pyyaml

 

 

Android 工具:

安装 ADB

安装 Android SDK

 

10.2 设备配置

Android 模拟器:

bash

启动模拟器

emulator avd <模拟器名称>

 

查看设备 ID

adb devices

 

在 YAML 中配置

android:

deviceId: emulator5554

 

 

真机连接:

bash

启用 USB 调试

连接设备后查看 ID

adb devices

 

配置设备 ID

android:

deviceId: <真机ID>

 

 

10.3 模型配置

编辑 `.env` 文件:

bash

MIDSCENE_MODEL_BASE_URL="https://conanaiplatform.zhenguanyu.com/litellm/"

MIDSCENE_MODEL_API_KEY="skyourapikey"

MIDSCENE_MODEL_NAME="qwen3vlflash"

MIDSCENE_MODEL_FAMILY="qwen3vl"

 

 

切换模型(如 Doubao Seed):

bash

注释当前模型,取消注释目标模型

MIDSCENE_MODEL_NAME="qwen3vlflash"

MIDSCENE_MODEL_NAME="doubaoseed2.0pro260215"

MIDSCENE_MODEL_FAMILY="doubaoseed"

 

十一、最佳实践

11.1 测试用例编写建议

合理使用缓存

固定 UI 元素(如顶栏按钮)使用缓存

动态内容(如弹窗)设置 `cacheable: false`

 

错误容忍策略

弹窗处理设置 `continueOnError: false`

关键流程失败应立即停止

 

自然语言描述技巧

描述清晰具体:「顶部当前可见的返回按钮」比「返回按钮」更准确

包含条件判断:「若有弹窗则点击,没有则不操作」

 

11.2 性能优化

截图缩放

yaml

screenshotResizeScale: 0.3 降低到 30%,加快响应速度

 

 

减少不必要的 AI 调用

使用 `sleep` 代替简单等待

固定延迟用 `runAdbShell` 直接执行 ADB 命令

 

缓存策略优化

首次运行后检查缓存命中率

调整 `cacheable` 配置

 

11.3 稳定性提升

🛡️弹窗处理

多次重复处理弹窗(避免遗漏)

使用条件判断(「若有则点击,没有则不操作」)

 

🛡️超时时间设置

yaml

aiWaitFor: 页面加载完成

timeout: 15000 根据实际情况调整

 

 

🛡️分段验证

将长流程拆分为多个 task

每个 task 添加明确的 `name`

 

十二、常见问题

12.1 Midscene 相关

 

Q: 元素定位失败怎么办?

检查自然语言描述是否准确

查看当前截图,确认元素可见

尝试设置 `cacheable: false` 重新识别

 

Q: AI 理解错误?

优化自然语言描述,添加更多上下文

检查截图是否清晰(缩放比例是否合适)

考虑切换模型(Qwen3VL ↔ Doubao Seed)

 

Q: 超时问题?

增加 `timeout` 时间

检查网络连接

确认设备性能正常

 

12.2 设备相关

Q: ADB 连接失败?

bash

重启 ADB 服务

adb killserver

adb startserver

 

检查设备连接

adb devices

 

 

Q: App 启动失败?

确认包名正确

检查 App 是否已安装

查看设备存储空间

 

12.3 报告与邮件

 

Q: 报告生成失败?

检查 `midscene_run/output/` 目录下是否有 `summary*.json`

查看 Python 脚本执行日志

 

Q: 邮件发送失败(535 authentication failed)?

确认使用的是「客户端专用密码」,不是网页登录密码

检查企业邮箱是否开启了 SMTP 功能

等待几分钟后重试(可能是服务器繁忙)

 

Q: 附件过大发送失败?

设置 `ATTACH_MIDSCENE_REPORT = False` 不发送附件

只发送精简 HTML 简报

 

 

 

附录

 

A. 常用命令速查

 

bash

安装依赖

npm install @midscene/android savedev

pip install pyyaml

 

运行测试

midscene ShanDiantest.yaml

 

按任务名筛选

python3 scripts/run_yaml_by_task_name.py ShanDian.yaml "录音"

 

一键执行

./scripts/run_yaml_then_report_then_email.sh

 

生成报告

python3 scripts/generate_midscene_email_report.py

 

发送邮件

python3 scripts/send_midscene_report_email.py

 

查看设备

adb devices

 

重启 ADB

adb killserver && adb startserver

 

 

B. 相关链接

 

Midscene 官方文档https://midscenejs.com/

测试用例集https://capas.zhenguanyu.com//cases/edit/19177

项目路径`/Users/kanyun/.jenkins/workspace/自动化测试/AI_AUTO_TEST`

 

 UI自动化需要配置的环境

一、android 运行环境

# 1. nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

 

# 2. Node.js

nvm install 25.8.0 && nvm use 25.8.0

 

# 3. Midscene(全局)

npm install -g @midscene/android

 

# 4. Python 环境&依赖

标准库

用途

smtplib / ssl

发邮件(SMTP)

json

解析 summary/断言 JSON

re

正则解析日志时间戳、<errors> 标签

calendar

时间戳换算(兼容 Python 3.6)

pathlib

文件路径操作

sys / os

系统输出、文件替换

email / mime

构造邮件 MIME 结构

 

 

# 5. ADB / Android SDK

adb devices   # 验证设备可见

 

闪电 AI 远程执行自动化操作说明 

一、适用场景

本文档用于说明如何通过远程服务器执行闪电 AI 自动化测试任务。执行过程中需要将本地手机通过 USB 连接到个人电脑,并通过  ⁠adb tcpip⁠  将手机调试端口暴露给远程服务器使用。

 

二、前提条件

在开始操作前,请确认已满足以下条件:

1. 本地电脑已安装  ⁠adb⁠  命令

 ⦁可通过以下命令检查:

adb version

2. 手机需要全程通过 USB 数据线连接电脑

 ⦁连接后,手机上如弹出「是否允许 USB 调试」或「是否允许访问」提示,请选择允许。

3. 执行脚本时,手机要有线上百科app,也要登陆成功

此脚本目前没有自动安装包、登陆操作,需要前置这些条件。

 

三、登录远程服务器

在本地终端执行:

ssh ape@10.1.6.50

密码:1020

 

四、进入自动化项目目录

登录远程服务器后,进入自动化测试目录:

cd /Users/ape/Documents/AUTO_TEST

项目代码目录为:

/Users/ape/Documents/AUTO_TEST/shan-dian-ai

 

 

五、获取手机 IP 地址

在手机上查看当前连接的 Wi-Fi 网络,例如:

kanyun

进入网络详情页,找到手机的 IP 地址。

示例:

10.1.24.252

注意:后续命令中的 IP 地址需要替换为你手机实际显示的 IP。

 

六、本地电脑开启 adb TCP 调试端口

在本地电脑执行以下命令:

adb tcpip 5555

执行过程中,手机可能会弹出「是否允许 USB 调试」或「是否允许访问」提示,请选择允许。

该命令的作用是让手机通过  ⁠5555⁠  端口提供 adb 调试能力,方便远程服务器连接手机。

 

七、远程服务器连接手机

在远程服务器上执行

adb connect 10.1.24.252:5555

其中  ⁠10.1.24.252⁠  需要替换为你的手机 IP。

然后检查设备连接状态:

adb devices

如果连接成功,会看到类似输出:

List of devices attached

10.1.24.252:5555    device

如果状态不是  ⁠device⁠ ,请检查

 ⦁手机是否仍连接 USB

 ⦁手机是否允许了 USB 调试

 ⦁手机和远程服务器网络是否互通

 ⦁IP 地址是否填写正确

 ⦁adb 服务是否正常

 

八、测试账号

线上测试账号:

10093582442

 

九、执行自动化脚本

进入项目目录:

cd /Users/ape/Documents/AUTO_TEST/shan-dian-ai

执行自动化脚本:

sh ./scripts/run_and_email.sh ShanDian.yaml your_mail@qq.com

其中:

 ⦁ ⁠ShanDian.yaml⁠ :自动化用例配置文件

 ⦁ ⁠your_mail@qq.com⁠ :测试结果接收邮箱,请替换为自己的邮箱地址

示例:

sh ./scripts/run_and_email.sh ShanDian.yaml zhangdanbj03@kanyun.com

 

十、常见问题排查

1. 执行  ⁠adb devices⁠  看不到设备

可以尝试:

adb kill-server

adb start-server

adb devices

如果仍然看不到设备,请重新插拔 USB 数据线,并确认手机已开启 USB 调试。

 

2.  ⁠adb connect⁠  失败

请检查:

1. 手机 IP 是否正确;

2. 手机和远程服务器是否在同一网络或网络可达;

3. 是否已在本地电脑执行:

adb tcpip 5555

4. 手机是否弹出授权提示且已点击允许。

 

3. 执行自动化时提示找不到设备

在远程服务器上重新执行:

adb devices

确认设备状态为:

device

如果不是,请重新执行:

adb connect 手机IP:5555

 

4. 自动化脚本执行失败

建议按以下顺序排查:

1. 确认当前目录是否正确:

pwd

2. 确认 YAML 文件是否存在:

ls ShanDian.yaml

3. 确认设备连接正常:

adb devices

4. 查看脚本报错日志,根据具体错误继续定位。

 

十一、完整操作流程汇总

# 1. 登录远程服务器

ssh ape@10.1.6.50

 

# 2. 进入项目目录

cd /Users/ape/Documents/AUTO_TEST/shan-dian-ai

 

# 3. 本地电脑开启 adb tcpip 模式

adb tcpip 5555

 

# 4. 远程服务器连接手机

adb connect 10.1.24.252:5555

 

# 5. 检查设备状态

adb devices

 

# 6. 执行自动化脚本

sh ./scripts/run_and_email.sh ShanDian.yaml your_mail@qq.com

十二、目录结构说明

文件

IntoApp.yaml 进入百科app的流程

ShanDian.yaml 执行闪电AI的流程

目录

midscene_run 执行中的日志、报告

错位定位

查看报告最直观,报告都是html 格式

报告位置:midscene_run/report

服务器无法看html , 可以下载到本地看,在本地执行命令如下:

scp ape@10.1.6.50:/Users/ape/Documents/AUTO_TEST/shan-dian-ai/midscene_run/report/ShanDian-2026-07-17_16-47-46-40d9885d.html /Users/kanyun/Desktop

 

十二、修改闪电 AI 自动化代码

代码地址:https://gitlab-ee.zhenguanyu.com/zhangdanbj03/shan-dian-ai

分支地址:https://gitlab-ee.zhenguanyu.com/autotest/shan-dian-ai/-/tree/feature/zd-test?ref_type=heads

修改完成后,在服务器拉取一下就可以执行新代码

cd /Users/ape/Documents/AUTO_TEST

git clone https://gitlab-ee.zhenguanyu.com/zhangdanbj03/shan-dian-ai.git

git pull

 

 

 

 

 

posted @ 2026-08-12 10:35  东方不败--Never  阅读(39)  评论(0)    收藏  举报