当前位置: 首页 > news >正文

Midscene 低代码实现Android自动化

一、传统Android自动化的挑战

传统Android自动化主要依赖于如UiAutomator、Espresso等框架。这些框架虽然在一定程度上实现了应用操作的自动化,但存在不少痛点。

  1. 复杂的脚本编写:开发人员需要深入掌握编程语言(如Java或Kotlin)以及特定自动化框架的API。例如,使用UiAutomator定位界面元素时,需精确编写基于资源ID、类名、坐标等复杂选择器。假设要点击一个按钮,代码可能如下:
UiObject2 button = device.findObject(By.res("com.example.app:id/button_id"));
if (button != null) {button.click();
}

这对于非专业开发人员或快速迭代的项目而言,编写和维护成本极高。
2. 脆弱的稳定性:界面的微小变化,如元素ID变更、布局调整,都可能导致自动化脚本失效。以一个简单的登录页面为例,若用户名输入框的ID从“username_input”改为“login_username_input”,所有依赖该ID的自动化脚本都需修改,否则无法正常运行。
3. 元素定位困难:面对复杂的UI结构,尤其是嵌套层级多、元素特征不明显的情况,传统定位方式难以精准找到目标元素。在一个包含多个相似列表项的页面中,准确点击特定列表项内的某个按钮,常常需要编写冗长且易错的遍历逻辑。

二、Midscene带来的革新

Midscene作为一款先进的自动化工具,有效克服了上述难题,具有以下显著优势:

  1. 自然语言交互:Midscene允许用户使用自然语言描述自动化任务,极大降低了编写门槛。例如,只需写下“打开淘宝应用,搜索手机,点击搜索结果中的第一个商品”,Midscene就能理解并执行相应操作,无需复杂代码编写。
  2. 强大的适应性:借助多模态AI推理能力,Midscene对界面变化有更强的适应性。即使界面元素ID、布局改变,只要其功能和视觉特征相对稳定,Midscene仍能基于语义理解找到目标元素并执行操作。
  3. 高效的元素识别:通过先进的视觉语言模型,Midscene能够快速且准确地识别屏幕上的各种元素,无论是标准UI组件还是自定义视图,都能精准定位,大大提高了自动化操作的准确性和效率。

三、Midscene实现Android自动化的具体步骤

安装 Node.js

安装 Node.js 18 或以上版本。

准备 API Key

准备一个视觉语言(VL)模型的 API Key。

你可以在 选择 AI 模型 文档中查看 Midscene.js 支持的模型和配置。

安装 adb

adb 是一个命令行工具,允许你与 Android 设备通信。有两种安装 adb 的方法:

  • 方法 1:使用 Android Studio 安装
  • 方法 2:使用 Android 命令行工具 安装

验证 adb 是否安装成功:

adb --version

当你看到以下输出时,表示 adb 安装成功:

Android Debug Bridge version 1.0.41
Version 34.0.4-10411341
Installed as /usr/local/bin//adb
Running on Darwin 24.3.0 (arm64) 

设置环境变量 ANDROID_HOME

参考Android 环境变量,设置环境变量 ANDROID_HOME

验证 ANDROID_HOME 变量是否设置成功:

echo $ANDROID_HOME

当上述命令有输出时,表示 ANDROID_HOME 变量设置成功:

/Users/your_username/Library/Android/sdk

连接 Android 设备

在 Android 设备的开发者选项中,启用 ‘USB 调试’,如果存在 ‘USB 调试(安全设置)’,也启用它,然后使用 USB 线连接 Android 设备。
在这里插入图片描述
验证连接:

adb devices -l

当看到以下输出时,表示连接成功:

List of devices attached
s4ey59	device usb:34603008X product:cezanne model:M2006J device:cezan transport_id:3

配置 AI 模型服务

将你的模型配置写入环境变量。更多信息请查看 选择 AI 模型。

# 替换为你的 API Key
export OPENAI_API_KEY="sk-abcdefghijklmnopqrstuvwxyz"# 可能需要更多配置,如模型名称、接入点等,请参考 《选择 AI 模型》文档
export OPENAI_BASE_URL="..."

创建 yaml文件

下面是一个登录WPS office的用例

android:deviceId:  xxxxxtimeout: 30000   # 全局超时时间设置为30秒tasks:- name: 打开WPS Office并登录flow:- ai: 打开WPS Office应用wait: 5000  # 等待应用启动# 导航至登录页面(增加状态检查)- ai: 点击底部导航栏的"我"选项wait: 2000retry: 2onError:- ai: 等待界面加载完成wait: 5000- ai: 再次点击底部导航栏的"我"选项wait: 2000- aiAssert: 验证界面出现立即登录文案timeout: 8000- ai: 点击"立即登录"选项wait: 3000retry: 3- ai: 勾选"已阅读并同意金山办公在线协议服务端和WPS隐私政策"选项,注意勾选时点击圆圈勾选wait: 3000retry: 4- ai: 点击三个点"..."选项wait: 2000retry: 3- ai: 点击"账号密码"登录选项wait: 5000- ai: 点击"手机号或邮箱"输入框wait: 2000- ai: 在输入框中输入"xxx"wait: 2000- ai: 点击"密码"输入框wait: 2000- ai: 在密码输入框中输入"xxx"wait: 2000# 智能验证与登录流程- ai: 点击"点击按钮开始智能验证"按钮wait: 10000retry: 2- ai: 点击"立即登录"按钮wait: 8000retry: 1- ai: 点击"确认登录"按钮,如果界面还显示确认登录则继续点击,直到不显示为止retry: 5wait: 8000  # 延长登录等待时间# 弹窗处理- ai: 如果出现"绑定手机"相关弹窗:1. 点击左上角的返回按钮"<"2. 等待1000ms后检查是否仍有弹窗3. 若仍有弹窗,点击"暂不绑定"else:不执行任何操作wait: 3000- ai: 如果出现其他弹窗:1. 优先点击"暂不开启"按钮2. 等待2000ms若出现"仍不开启",点击"仍不开启"按钮3. 等待2000ms若出现其他弹窗有取消文案,点击"取消"按钮else:不执行任何操作wait: 3000# 最终验证- aiAssert: 验证界面底部出现"首页""我"文案desc: 登录成功判定依据timeout: 15000  # 大幅延长最终验证超时onError:- ai: 等待3秒后再次检查wait: 3000- aiAssert: 再次验证界面底部出现"首页""我"文案timeout: 10000

运行脚本

midscene  .\android_script\open_wps_office.yaml     --dotenv-override=true   --share-browser-context 

查看运行结果

在这里插入图片描述

http://www.dtcms.com/a/391482.html

相关文章:

  • ADB使用指南
  • FunCaptcha如何查找sitekey参数
  • 大模型如何让机器人实现“从冰箱里拿一瓶可乐”?
  • Python实现液体蒸发优化算法 (Evaporation Rate Water Cycle Algorithm, ER-WCA)(附完整代码)
  • MySQL 数据库的「超级钥匙」—`mysql_real_connect`
  • LeetCode 每日一题 3484. 设计电子表格
  • RAGAS深度解析:引领RAG评估新时代的开源技术革命
  • aave v3.4 利率计算详解
  • rook-ceph CRD资源配置时效问题
  • MySQL学习笔记-进阶篇
  • Rust 关键字
  • 排版使用latex排版还是word排版更容易通过mdpi remote sensing的审稿?
  • Qt QML ToolTip弹出方向控制问题探讨
  • [Windows] PDFQFZ(PDF加盖骑缝章) v1.31
  • 四网络层IP-子网掩码-路由表-真题
  • 安装QT6.9.2
  • 使用 NodePort
  • IP6163至为芯具备MPPT硬件算法的太阳能光伏降压DC-DC芯片
  • 从“道生一”理念看宇宙规律与现代科技之关联
  • CKS-CN 考试知识点分享(9) 关闭API凭据自动挂载
  • 初次接触MCP
  • 高防服务器按照应用场景划分为哪些类型
  • 【项目】基于One Thread One Loop模型的高性能网络库实现 - 服务器模块实现
  • 京准电钟NTP时间同步服务器通信系统技术应用方案
  • Next.js 错误处理:自定义错误页面和错误边界
  • 操作教程|使用Cursor工具连接JumpServer资产
  • prefix Lm和causal LM encoder-decoder区别以及各自有什么缺点
  • 从零开始学习PX4源码29(Commander 任务)
  • 基于高速摄像机与6Dof测量的手机跌落实验分析
  • 大恒2509新版本掉线重连