告别手动操作:UI-TARS让Android自动化测试像搭积木一样简单
你还在为重复的Android应用测试感到头疼吗?还在为编写复杂的自动化脚本而烦恼?本文将带你快速掌握UI-TARS的移动应用自动化能力,无需编程基础也能轻松实现Android应用的自动化操作,让你从此告别繁琐的手动测试,效率提升10倍!
读完本文,你将学会:
- 如何快速搭建UI-TARS移动自动化环境
- 使用MOBILE_USE模板创建自动化任务
- 解析模型输出并生成可执行的自动化脚本
- 实战演示:自动完成Android应用的登录流程
- 常见问题解决与高级技巧
什么是UI-TARS?
UI-TARS是一个开源的多模态智能体,基于强大的视觉语言模型构建,能够在虚拟环境中执行各种任务。特别是在移动应用自动化方面,UI-TARS表现出色,在Android World benchmark上达到了64.2的高分,远超之前的SOTA模型。
UI-TARS-1.5版本通过强化学习增强了推理能力,能够在采取行动前进行思考推理,显著提高了性能和适应性。其核心优势在于能够理解GUI界面并生成相应的操作指令,实现真正的端到端自动化。
环境准备:5分钟上手
安装UI-TARS Python包
UI-TARS提供了便捷的Python包,只需一行命令即可完成安装:
pip install ui-tars
# 或使用uv加速安装
uv pip install ui-tars
准备Android测试环境
- 安装Android Studio并配置SDK
- 启动Android模拟器或连接真实设备
- 确保adb调试已启用
详细的部署指南可参考官方部署文档。
MOBILE_USE模板:专为移动自动化设计
UI-TARS提供了三种提示模板,其中MOBILE_USE专为移动设备或Android模拟器设计,包含了移动特有的操作指令。
MOBILE_USE主要特性
- 支持移动特有操作:
long_press(长按)、open_app(打开应用)、press_home(Home键)、press_back(返回键) - 优化的坐标系统,适配移动设备屏幕
- 支持滑动、输入、导航等常见移动操作
模板定义位于codes/ui_tars/prompt.py文件中,你可以根据需要进行自定义修改。
实战演示:自动登录Android应用
下面我们通过一个实际案例来演示如何使用UI-TARS实现Android应用的自动登录。
步骤1:准备测试用例
首先,我们需要准备一个包含测试步骤的消息文件。项目中提供了示例文件data/test_messages.json,你可以参考其格式创建自己的测试用例。
步骤2:使用MOBILE_USE模板调用模型
from ui_tars.prompt import get_prompt_template
# 获取MOBILE_USE模板
prompt_template = get_prompt_template("MOBILE_USE")
# 构建测试指令
test_instruction = """
任务:自动登录"示例应用"
步骤:
1. 打开应用
2. 输入用户名:testuser
3. 输入密码:testpass
4. 点击登录按钮
"""
# 生成完整提示
prompt = prompt_template.format(instruction=test_instruction)
步骤3:解析模型输出
模型输出包含思考过程和动作指令,我们需要使用action_parser模块将其解析为结构化数据:
from ui_tars.action_parser import parse_action_to_structure_output
# 假设response是模型返回的字符串
response = """Thought: 我需要先打开应用...
Action: open_app(package_name='com.example.app')
Thought: 现在需要输入用户名...
Action: click(start_box='(300, 400)')
Action: type(text='testuser')
..."""
# 解析响应
original_image_width, original_image_height = 1080, 1920 # 根据设备分辨率调整
parsed_dict = parse_action_to_structure_output(
response,
factor=1000,
origin_resized_height=original_image_height,
origin_resized_width=original_image_width,
model_type="qwen25vl"
)
步骤4:生成自动化脚本
解析后的结构化数据可以直接转换为pyautogui脚本:
from ui_tars.action_parser import parsing_response_to_pyautogui_code
# 生成pyautogui代码
pyautogui_code = parsing_response_to_pyautogui_code(
responses=parsed_dict,
image_height=original_image_height,
image_width=original_image_width
)
print(pyautogui_code)
生成的代码将包含完整的自动化步骤,可直接执行或保存为.py文件。
坐标可视化
为了帮助理解坐标处理过程,UI-TARS提供了坐标可视化工具。你可以通过以下代码将模型识别的坐标点绘制在截图上:
from PIL import Image, ImageDraw
import numpy as np
import matplotlib.pyplot as plt
# 加载截图
image = Image.open("screenshot.png")
# 获取解析后的坐标
start_box = parsed_dict[0]["action_inputs"]["start_box"]
coordinates = eval(start_box)
x1 = int(coordinates[0] * original_image_width)
y1 = int(coordinates[1] * original_image_height)
# 绘制坐标点
draw = ImageDraw.Draw(image)
radius = 5
draw.ellipse((x1 - radius, y1 - radius, x1 + radius, y1 + radius), fill="red", outline="red")
# 显示结果
plt.imshow(np.array(image))
plt.axis("off")
plt.show()
更详细的坐标处理指南可参考坐标处理说明。
性能对比:UI-TARS vs 传统自动化工具
UI-TARS相比传统的自动化工具(如Appium、Espresso)有哪些优势?让我们通过数据来直观感受:
| 评估指标 | UI-TARS | Appium | Espresso |
|---|---|---|---|
| 学习曲线 | 低(无需编程) | 中 | 高 |
| 界面变化适应性 | 高(视觉理解) | 低(依赖元素ID) | 低(依赖元素ID) |
| 跨应用兼容性 | 高 | 中 | 低 |
| 非标准控件支持 | 高 | 低 | 低 |
| 部署复杂度 | 低 | 中 | 高 |
UI-TARS在Android World benchmark上的表现也证明了其强大的能力:
常见问题与解决方案
Q: 如何处理不同分辨率的设备?
A: UI-TARS会自动处理坐标缩放,只需在解析时提供原始图像的宽高即可:
parsed_dict = parse_action_to_structure_output(
response,
factor=1000,
origin_resized_height=1920, # 原始图像高度
origin_resized_width=1080, # 原始图像宽度
model_type="qwen25vl"
)
Q: 模型无法识别某些UI元素怎么办?
A: 可以尝试以下方法:
- 提供更高质量的截图
- 在提示中更详细地描述元素位置和外观
- 使用
GROUNDING模板专门优化元素定位
Q: 如何提高自动化脚本的稳定性?
A: 建议:
- 在关键步骤之间添加适当的延迟
- 增加错误检查和重试机制
- 使用更具体的指令描述
总结与展望
UI-TARS为Android应用自动化提供了一种全新的方式,通过视觉理解和自然语言指令,大大降低了自动化测试的门槛。无论是普通用户还是测试工程师,都能快速上手并创建复杂的自动化任务。
随着UI-TARS-2的发布,我们可以期待更多令人兴奋的功能,如增强的GUI理解能力、游戏自动化、代码生成和工具使用等。UI-TARS正朝着"全能智能体"的方向发展,为复杂任务提供无缝的多能力集成。
如果你觉得本文对你有帮助,请点赞、收藏并关注我们,以便获取最新的UI-TARS使用技巧和最佳实践!下期我们将介绍如何使用UI-TARS实现移动应用的自动化测试报告生成,敬请期待!
参考资料
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00

