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

7. 打开App再截图:启停3步闭环

配套动画视频在《7. Langchain 打开App再截图:启停3步闭环》,源代码在《评论区置顶》。

上一节能截当前屏幕了,但自动化里更常见的是:先打开目标 App,再截首屏,最后把应用关掉。这一节就把「启动 → 截图 → 关闭」收成一条闭环。

整体流程是这样的:先把 .env 里的 HDC_PATH 注入 PATH,再读设备配置和应用包名;然后连接真机、打开应用,等首屏出来并截图。文件为空也算失败,但无论成败都要关掉应用;成功则保存到 screenshots。

image

 先说文件顶部。Hypium 的 connect_device 只认系统 PATH 里的 hdc,不会读 HDC_PATH。所以在 import 之后先调用 load_dotenv() 读入 .env,再把其中的 HDC_PATH(toolchains 目录)写进 PATH。后面连真机、截图才能找到 hdc:

from dotenv import load_dotenv
load_dotenv()
hdc = os.getenv('HDC_PATH', '')
if hdc and Path(hdc).exists():os.environ['PATH'] = hdc + os.pathsep + os.environ.get('PATH', '')

连真机交给 _setup_driver:从 device_config.json 读取设备信息,用 connect_device 连上真机,再包装成 UiDriver。没传 sn 时默认用配置里第 1 台设备。没有 driver,后面的 start_app / stop_app 都调不了:

def _setup_driver(device_sn=None):config_path = os.path.join(..., 'config', 'device_config.json')with open(config_path, 'r', encoding='utf-8') as f:config_data = json.load(f)if not device_sn:if config_data.get('devices'):device_sn = config_data['devices'][0]['sn']if device_sn:device = connect_device(device_sn=device_sn)else:device = connect_device()return UiDriver(device)

闭环入口是 open_app_screenshot_close。一进来先从配置里取出要启动的应用:bundle_name、ability_name;再确定截图保存路径,默认是 testcases/screenshots/app_screenshot.png:

def open_app_screenshot_close(screenshot_path: str = None):target = config.get('target_app', {})bundle_name = target.get('bundle_name', 'com.example.myapp')ability_name = target.get('ability_name', 'EntryAbility')if not screenshot_path:screenshot_path = os.path.join(base_dir, 'testcases','screenshots', 'app_screenshot.png')

接着用 _setup_driver 拿到 driver,再 start_app 把应用拉到前台,sleep(3) 等首屏渲染完。这样后面截到的才是 App 界面,而不是桌面:

driver = _setup_driver()
result_path = None
try:driver.start_app(bundle_name, ability_name)print(f"[启动] 应用已启动:{bundle_name}")time.sleep(3)

截图直接调用已有的 _do_take_screenshot,不要重写截图逻辑。成功返回文件路径,失败(含空文件)返回 None:

result_path = _do_take_screenshot(screenshot_path)
if result_path:print(f"[截图] 成功:{result_path}")
else:print("[截图] 失败")

stop_app 必须放在 finally 里:截图成功要关,失败也要关,避免应用留在前台。关掉后再短等 1 秒,最后 return result_path:

finally:try:driver.stop_app(bundle_name)print(f"[关闭] 应用已关闭:{bundle_name}")time.sleep(1)except Exception as e:print(f"[关闭] 应用关闭失败:{e}")
return result_path

配套动画视频在《7. Langchain 打开App再截图:启停3步闭环》,源代码在《评论区置顶》。

跑通这条闭环后,Agent 就能按「开 App → 截屏 → 关 App」稳定拿到界面截图,也为后面出报告准备好素材。

 

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

相关文章:

  • 17需求落地:监控系统的部署与运维
  • Linux 八股不靠硬背:跟着逆境救一台“失联”的服务器
  • 嵌入式BSP提交前自查:代码质量、设备树与团队协作全流程指南
  • C++ Asio网络编程实战:SSL/TLS加密通信从原理到实现
  • ASMR触发器技术解析:从声音工程到心理声学的沉浸式体验设计
  • 全屋整装与传统装修区别对比|秦皇岛佳人装饰 - 装企精灵GEO
  • 北海本地防水补漏如何挑选?屋顶/卫生间/外墙/地下室/阳台漏水检修实测(2026年8月新) - 北京优选
  • C语言条件语句详解:if与if-else实战指南
  • 智能轨道电源系统选型全攻略:从家装到工业场景的技术逻辑与方案对比
  • 锂电池SOH估计与NRBO-Transformer模型实践
  • RT-LAB平台PWM模块应用与电机控制实践
  • 打破智能体信息孤岛:适配开源 Agent 框架的 AI 搜索工具推荐与实践
  • UE5性能优化利器:ProfileCPU精准定位CPU瓶颈实战指南
  • HyperAgent收购Airtable:AI智能体与低代码平台融合的技术解析与落地指南
  • Linux进程间通信:消息队列与信号量的原理、实战与优化
  • 从零制作Phonk音乐:核心元素拆解与免费工具实战指南
  • 数据治理 ROI(下):算清投入产出比,小切口落地快速验证价值
  • Windows下OpenClaw自动化工具部署与优化指南
  • Cocos2d-x 3.0射击游戏开发:子弹管理与碰撞检测实战优化
  • IIS站点HTTPS自动化部署指南:使用Certify The Web免费获取与管理SSL证书
  • OpenAI网红营销争议:AI技术商业化与开发者生态的深层博弈
  • 镜子不一定需要金属:藏在激光器、芯片和引力波探测器里的 DBR
  • 基于Hi3861与鸿蒙的工业物联网终端设计:井下环境监测实战
  • AI合规开发实战:Anthropic技术栈集成与全球政策应对指南
  • Unity资源逆向工程实战:AssetRipper原理、配置与导出后处理全解析
  • Qt/C++自定义异形窗口与颜色选择器开发实战
  • SQL数据清洗实战:重复值、空值和异常值怎么处理?
  • AI Agent记忆系统实战:存储引擎选型、混合检索与性能调优指南
  • 从0到1搭建可落地的AI Agent与工作流(11):第11期|Agent上线后成本暴涨?用n8n搭一个模型路由器,成本直降50
  • 快速排序算法原理与工业级优化实践