android minicap web,WebDriverAgent 与 Minicap 在 ios 真机远控上的应用实践

一、引言

真机远控是一种通过浏览器远程操作智能手机的技术,主要分为两大部分关键功能:实时获取手机屏幕数据及实时传输屏幕操控数据.

开测平台中,已经实现了 Android 手机的远程操控方案.在此基础上,进一步研究 ios 设备的远控最佳方案.

本文代码部分使用 python 语言

二、工具介绍

minicap 是开源项目 STF(SmartPhone Test Farm) 中的高速截图工具。STF 利用此工具不断的传输图片信息并在 web 端绘制实现. iOSMinicap 提供一个 Socket 接口用于实时从 iOS 设备屏幕捕获数据,它采用 AVFoundation 和 iOS 屏幕镜像功能实现。

Github 地址:https://github.com/openstf/ios-minicap

WebDriverAgent(WDA) 是 facebook 在 2015 年推出的一款移动测试框架,支持模拟机和真机.WDA 在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备。你可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确。wda 是 iOS 上一个完美的端到端的自动化解决方案.

Github 地址:https://github.com/facebook/WebDriverAgent

三、初步方案:ios-minicap+WDA 原生版本

鉴于 minicap 工具在 Android 设备上的优秀的高速截图性能,于是首先尝试 ios-minicap 在 ios 设备上的应用.

此方案要求:ios 版本 8 以上

测试步骤如下:

1、从 github 上下载 ios-minicap-master 项目全部文件.

3、连接 ios 设备 (一台).

4、启动 minicap:

04b95f67c8dd1016346db0a1c5436bb4.png

5、接收 minicap 从手机端传回的图片数据:

1) 建立 socket 连接到 minicap 提供的端口:

94506f4bbf8b96d9cc943830226ef8eb.png

2) 读取全局 header,仅读取一次.header 结构如下:

493fb3894463238bc05ad7f6e84412d3.png

解析 header:

8b4a6ec68503e914d8f4faebe19e40c6.png

3) 接收图片信息并保存至队列:

3af6f25539071ee3f544bceec8b73e6a.png

4) web server 采用 websocket 传输图片数据,ws 连接 open 以后,开始从图片队列中取数据传送给前端显示.

958e0426b07d2b79534566433dab8ae6.png

6、使用 WDA 操作手机屏幕:

1) 端口映射:终端中运行命令 iproxy 8100 8100,保持进程运行中.

2) 用命令行启动 WDA:

9c4b1e709c0f4c3fe2bfb5a226819aaf.png

测试 WDA 是否启动成功可以通过操作命令是否超时来判断:

55a8cd8f62aea6a2d93d665204c16e4b.png

3) web server 建立新的一条 websocket 连接,用于接收浏览器页面的鼠标操作,用于 WDA 操作手机屏幕的参数.

949bfc5c3c071a95a204b3d406ebe98c.png

7、整体运行效果如图:

ec4728bf2f3200e1645cd19e22893152.gif

启动后进程不可退出

四、优化方案:WDA 屏幕图片接口及控制效果优化

一、原生的 WDA 中事件驱动速度使用同步机制,在一定程度上影响了手机的响应速度,于是在代码中做修改,去掉同步机制.提高响应速度.

二、Ios-minicap 的重要缺陷在于:一台 PC 只能支持一台手机的图片传输,目前 stf 团队尚未解决多台设备的问题.不符合目前开测平台的大量真机远控需求.并且 minicap 的启动会杀掉 WDA 的 test 进程,造成两者的启动顺序必须严格控制.给程序增加了不稳定性及操作的复杂性.于是借助 ios 开发团队的工程师对 WDA 代码进行了修改:添加了快速截屏的功能,并增加一个 socket 子线程 (端口号:8888) 可以对外传输图片.因此新方案代码修改如下:

1.新增端口映射:iproxy 8888 8888. 用于用于接收手机端的图片传送.多个手机连接时,需要多个 PC 端口映射到手机端的 8888 端口.

2.图片数据没有 minicap 中的全局 header,每张图片的数据结构为:

Data_length(4 bytes)       Pic_data

其中 Data_length 标明后续的 Pic_data 的数据长度.

3.图片接收及保存,websocket 的建立与 minicap 相同.多台设备连接时,需要根据手机 id 识别映射的端口,根据其端口收取图片数据和传输操作数据.

三、两台设备同时操控的效果图如下:

33cb191b41c5792da0e91d8061d0c233.gif

五、方案对比

优化方案的优势:

1.能够支持一台 PC 同时连接多台手机,截图功能和操控功能均能够完全独立.

2.排除 minicap 对 WDA 进程的干扰.

优化方案的劣势:

WDA 截图及传输的速度不如 minicap,造成屏幕显示的帧率不如 minicap,帧率差别约在 30%,在显示效果上会失去一定的流畅度.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值