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

ADB模拟点击结合GLM-4.6V-Flash-WEB实现自动化测试

ADB模拟点击结合GLM-4.6V-Flash-WEB实现自动化测试

在移动应用测试领域,一个老生常谈的问题始终困扰着工程师:当UI界面频繁变更、按钮是图片而非文本、或者控件没有唯一ID时,传统的自动化脚本动辄失效。我们写了一堆基于XPath或ResourceId的定位逻辑,结果产品改了个图标,整个流程就断了——这种“脆弱性”让自动化测试常常沦为一次性工具。

有没有可能让测试系统像人一样“看懂屏幕”,然后做出操作决策?比如,你告诉它:“点那个红色的登录按钮”,它就能根据当前画面判断哪里是登录按钮,并准确点击?这正是多模态大模型带来的新范式。而今天我们要聊的,就是如何用GLM-4.6V-Flash-WEB这个轻量级视觉语言模型,配合最基础的ADB模拟点击,构建一套真正具备“视觉感知+智能决策+自动执行”能力的自动化测试链路。

这套方案不依赖复杂的SDK,也不需要被测应用做任何改造,甚至能在游戏界面上运行。它的核心思路很简单:
截图 → 问模型“该点哪” → 解析答案 → 转换坐标 → ADB点击 → 循环。


让机器“看懂”屏幕:GLM-4.6V-Flash-WEB 的实战价值

GLM-4.6V-Flash-WEB 是智谱AI推出的轻量化多模态模型,专为高并发、低延迟场景设计。和那些动不动要多卡部署的“大块头”不同,它可以在单张RTX 3090上稳定运行,推理速度接近传统OCR,但理解能力远超规则引擎。

它的底层架构依然是Transformer,采用ViT作为图像编码器,将输入图像切分为patch后提取特征,再与文本指令通过交叉注意力机制融合。最终输出自然语言回答,比如:

“图中存在‘登录’按钮,位于右下角,大致坐标范围为x=800~900,y=1200~1300。”

这意味着我们不再需要预先知道控件的ID或文字内容,只要能用自然语言描述目标,模型就能从像素中找出对应区域。

为什么选它而不是其他模型?

维度OCR+正则匹配GLM-4V(通用版)GLM-4.6V-Flash-WEB
推理速度极快慢(500ms+)快(<150ms)
部署成本极低高(需A100或多卡)低(单卡消费级GPU即可)
多语言支持
语义理解能力较强(支持few-shot推理)
实际可用性场景受限延迟高难集成适合高频调用的自动化系统

如果你的目标是在CI/CD流水线里每分钟跑几十次测试,那响应速度和资源占用比绝对精度更重要。GLM-4.6V-Flash-WEB 正好卡在这个平衡点上。

如何调用?一个极简Python示例

假设你已经通过Docker或本地服务启动了GLM-4.6V-Flash-WEB的Web API(例如监听http://localhost:8080/generate),下面这段代码就可以完成一次“视觉问答”:

import requests from PIL import Image import base64 import io def image_to_base64(image_path): with open(image_path, "rb") as f: return base64.b64encode(f.read()).decode() def query_vlm(image_path, prompt): url = "http://localhost:8080/generate" payload = { "image": image_to_base64(image_path), "prompt": prompt, "max_tokens": 100 } headers = {"Content-Type": "application/json"} try: response = requests.post(url, json=payload, headers=headers, timeout=10) if response.status_code == 200: return response.json().get("text", "").strip() else: return f"Error: {response.status_code}, {response.text}" except Exception as e: return f"Request failed: {str(e)}" # 示例使用 result = query_vlm("/root/screenshots/login_page.png", "请分析图片,是否存在‘立即购买’按钮?如果存在,请描述其位置。") print("模型回复:", result)

典型输出可能是:

“存在‘立即购买’按钮,颜色偏红,位于屏幕右侧中部,估计中心坐标约为(920, 760)。”

接下来的任务,就是把这个“语义描述”转化为可执行的像素坐标。


从“看到”到“做到”:ADB模拟点击的本质

很多人以为自动化测试一定要用Appium或者UiAutomator,其实最原始也最稳定的手段,反而是ADB的input tap命令。

ADB全称Android Debug Bridge,是Android平台的标准调试工具。只要你开启了USB调试模式,PC就能通过adb shell向设备发送指令。其中:

adb shell input tap 540 960

这一行命令就会在设备上触发一次触摸事件,系统会生成完整的MotionEvent序列(ACTION_DOWN → 短暂延迟 → ACTION_UP),和真实手指点击几乎无异。

它凭什么比Appium更轻快?

方案是否需要安装客户端启动耗时控制粒度学习成本兼容性
ADB input tap<100ms坐标级极低所有Android设备
Appium是(WebDriverAgent)>3s控件级主流APP
Auto.js(JS脚本)~1s图像识别+坐标需Root或无障碍权限

ADB的最大优势在于“零侵入”。你不需在App里集成任何测试框架,也不依赖AccessibilityService,只要设备连上了,就能操作。

封装成Python函数,让它更好用

为了便于程序化调用,我们可以把ADB命令封装成一个带错误处理和多设备支持的函数:

import subprocess import time def adb_tap(x, y, device_id=None): """ 模拟点击指定坐标 :param x: 横坐标 :param y: 纵坐标 :param device_id: 设备序列号(多设备时必填) """ cmd = ["adb"] if device_id: cmd += ["-s", device_id] cmd += ["shell", f"input tap {x} {y}"] try: result = subprocess.run(cmd, capture_output=True, text=True, timeout=5) if result.returncode == 0: print(f"✅ 成功点击 ({x}, {y})") return True else: print(f"❌ 点击失败: {result.stderr}") return False except Exception as e: print(f"⚠️ 执行异常: {e}") return False # 使用示例 adb_tap(540, 960) time.sleep(1) adb_tap(200, 300)

这个函数可以轻松集成进你的测试主循环中,配合截图和模型推理形成闭环。


整体工作流:构建“视觉驱动”的自动化流水线

整个系统的运作流程可以用一张结构图来概括:

graph TD A[获取当前屏幕截图] --> B[构造自然语言问题] B --> C[发送至GLM-4.6V-Flash-WEB] C --> D[解析模型返回文本] D --> E[提取建议坐标] E --> F[映射为实际像素位置] F --> G[执行ADB点击] G --> H{是否达成目标?} H -- 否 --> A H -- 是 --> I[测试通过]

每一步都值得细究:

1. 截图采集

使用ADB原生命令抓取当前屏幕:

adb exec-out screencap -p > screen.png

注意要用exec-out而不是pull,前者直接输出二进制流,避免因文件路径权限导致失败。

2. 问题构造

根据测试用例动态生成提问文本。例如:

  • “请识别图中‘跳过广告’按钮的位置。”
  • “当前页面是否有弹窗?如果有,请指出关闭按钮的大致坐标。”
  • “查找带有购物车图标的按钮,并返回其位置。”

这类提示词的设计很关键。实验表明,加入“大致”、“估计”、“如果存在”等缓和语气,能显著降低模型产生“幻觉”的概率。

3. 结果解析

模型返回的是自然语言,我们需要从中抽取出坐标信息。可以通过正则匹配实现:

import re def extract_coordinates(text): # 匹配如 "(800, 1200)" 或 "x=800, y=1200" 的格式 patterns = [ r'\(?(\d+),\s*(\d+)\)?', # (x, y) r'x[=:]\s*(\d+)[,\s]*y[=:]\s*(\d+)' # x=..., y=... ] for pattern in patterns: match = re.search(pattern, text) if match: return int(match.group(1)), int(match.group(2)) return None # 示例 coord = extract_coordinates("中心位置大约在(920, 760)") print(coord) # 输出: (920, 760)

当然,也可以训练一个小的NER模型来做更精准的信息抽取,但对于大多数场景,正则已足够。

4. 坐标归一化与校准

不同设备分辨率各异。比如你在1080×1920的手机上训练出的坐标逻辑,在2K屏上就会偏移。解决方案是统一转换为相对坐标:

def absolute_to_relative(x, y, width=1080, height=1920): return round(x / width, 3), round(y / height, 3) def relative_to_absolute(rel_x, rel_y, cur_width, cur_height): return int(rel_x * cur_width), int(rel_y * cur_height)

这样即使换设备,也能保持行为一致。


工程实践中的关键考量

虽然原理简单,但在真实项目中仍有不少坑需要注意。

✅ 最佳实践建议

  • 控制截图频率:连续高频截图会导致设备CPU飙升,建议每次操作后等待至少1秒再截新图。
  • 启用结果缓存:对相同界面状态(可通过图像哈希判断)缓存模型输出,避免重复请求。
  • 添加重试机制:点击后检查界面是否变化(再次截图比对),若未响应则重新识别或跳过。
  • 日志可视化:保存每轮的截图、模型输入输出、执行动作,方便回溯调试。

⚠️ 潜在风险提醒

  • 模型幻觉:VLM有时会“编造”不存在的按钮,建议设置置信度过滤,或结合多个提示词交叉验证。
  • 网络延迟:若模型部署在远程服务器,API延迟可能成为瓶颈,优先考虑本地化部署。
  • 权限配置:确保ADB调试已开启,且授权列表中包含当前主机。
  • 合规边界:仅用于合法测试目的,禁止用于刷量、抢购等违反用户协议的行为。

它能解决什么问题?

这套组合拳特别适合应对以下几类棘手场景:

  • 图像按钮识别:传统工具无法处理只有图标没有文字的按钮,而VLM可以通过形状、颜色、上下文综合判断。
  • UI频繁变更:产品天天改版,XPath天天失效?现在只需修改一句自然语言指令即可适配。
  • 多语言适配测试:同一功能在中文显示“登录”,英文变成“Sign In”,但你只需要说“click the login button”,模型都能理解。
  • 动态加载内容:H5页面、游戏UI、动画过渡中的元素,只要截图时机得当,就能捕捉并操作。

更重要的是,得益于开源镜像和一键部署脚本(如项目中的/root/1键推理.sh),开发者几分钟内就能搭起原型环境,快速验证想法。


这种“视觉认知 + 设备控制”的模式,正在重新定义自动化测试的可能性。它不再依赖静态的UI树结构,而是模仿人类的操作直觉——先看一眼,再决定怎么点。随着边缘计算能力和小型化模型的进步,未来我们或许能在手机端直接运行类似的轻量VLM,实现实时、离线、自适应的智能交互代理。

而现在,你只需要一块安卓设备、一个GPU、一段Python脚本,就已经站在了这场变革的起点。

http://www.jsqmd.com/news/200050/

相关文章:

  • 2026年度振动时效及超声冲击设备十大品牌盘点白皮书 - 深度智识库
  • Dify触发器兼容性陷阱全曝光,99%团队都踩过的坑如何绕开?
  • Notepad++设置显示多行tab
  • 记一次用黑客技术后门爆破网站到提权的实战案例,黑客技术零基础入门教程建议收藏!
  • ComfyUI发布新版支持GLM-4.6V-Flash-WEB拖拽式部署
  • 从零开始部署GLM-4.6V-Flash-WEB:Jupyter一键运行脚本实操记录
  • ComfyUI工作流设计:GLM-4.6V-Flash-WEB与其他模型串联推理
  • AI智能体Sweekar:90年代电子宠物的现代继承者
  • 2026年辅助教学机器人选购指南:从K12到高校实训的优选方案 - 智造出海
  • 必知!AI 大模型应用架构图(全)
  • 2025定制石墨烯涂料热销榜:环氧玻璃钢、无溶剂环氧涂料、光固化保护套、环氧酚醛、石墨烯涂料批发选哪家 - 品牌推荐师
  • 实例控制台日志轮转防止GLM-4.6V-Flash-WEB日志过大
  • 2026年选择印度名义雇主EOR服务商:Safeguard Global服务商综合评估 - 品牌2025
  • AI智能体居然能自己写代码?传统瑟瑟发抖,大模型开发者必学新技能
  • AI智能体革命:从钢铁侠J.A.R.V.I.S到现实编程助手,小白程序员必学的未来技术!
  • 2026年知名的北京老人陪诊,北京情感关怀陪诊,北京一站式陪诊公司采购选型指南 - 品牌鉴赏师
  • 英语_阅读_Lithium batteries_待读
  • 【爆肝整理】2024年最火的4大AI智能体框架,小白也能轻松上手!
  • 从工具到团队:万智2.5多智能体正在改写企业决策与执行全链路
  • 基于Springboot2+Vue2+uniapp的单商家在线点餐外卖小程序 - 教程
  • 2026年评价高的垂直领域医生IP打造,民营医院医生IP打造,医生IP打造公司采购参考指南 - 品牌鉴赏师
  • 基于微信小程序的高校班务管理系统毕设源码+文档+讲解视频
  • Dify access_token配置最佳实践(资深架构师亲授配置秘诀)
  • 小白也能上手!阿里云工程师一年踩坑全记录:从概念争议到高可用Agent智能体构建实战
  • 实用指南:力扣1083-销售分析II
  • 20260105_165948_Agent综述论文火了,10大技术路径一文看尽
  • 【AI真香】别再卷了!这个Agent让小白秒变大神,代码、PPT、UI设计全包圆!真香警告!
  • 【Dify多模态数据处理核心技术】:掌握高效格式转换的5大黄金法则
  • 不用写服务器代码?XinServer 真能做到吗?
  • 【毕业设计】python基于CNN卷积神经网络对辣椒类别识别