云测平台iOS环境搭建

云测平台iOS环境搭建


前言

远程办公作为疫情常态化下的热门词汇,催生了各种远程办公,远程会议等工具.远程操作一台PC已经不是什么难事,那么如何远程操作一台iOS手机呢?
iOS 云真机的几个痛点:
1.图像传输
2.真机操作
3.键盘输入文本



一、图像传输

图像传输是一切远程的基础,那么假设一台远程的iOS设备在机房内,如何在家中看到这台手机的图像呢?答案有很多,最简单的实现依赖于WebdriverAgent(WDA)。是的,WDA是iOS远程真机的基础,图像,操作等等一切都可以依赖于WDA进行实现。市面上你能找到的云真机厂商都在使用自己修改过WDA,笔者作为一名云平台的开发者,几年前也修改过WDA的源码。但是随着WDA的迭代更新,使用原版的WDA也能完美的满足云真机的功能实现。当然,后面有些功能我们使用了WDA,但也没用WDA,这里后续会做详细的解释。此处只介绍图像传输部分。

首先,在WDA启动参数中添加MJPEG_SERVER_PORT = 10872,当然端口可以随意指定。
然后使用iproxy转发一下端口,接着用浏览器打开localhost:10872,图像就出来了,EZ。

在这里插入图片描述

高清不卡,帧率,压缩比,清晰度都可以通过WDA进行实时调整,既然图像流已经通过WDA拿到了,剩下的转发就很简单了,这里就不做过的的解释了。

二、真机操作

远程真机能看到图像只是第一步,下一步需要将用户在浏览器上的操作同步到iOS手机上,点击,滑动,HOME键等都可以用WDA实现,但真正用起来你会发现,WDA的反应真的慢,一个滑动翻页的操作,通过WDA封装过的接口/wda/dragfromtoforduration"实现的话,可能要1-3秒才能完成,那么有没有更快的办法呢?
当年因为这个问题,我们也修改过WDA的源码,但是随着WDA和苹果接口的迭代,慢慢的有些API不再允许使用了,直到我找到了WDA中直接调用W3C的接口,当然这部分在WDA 中没有过多的文档进行说明,所以主要需要参照W3C的文档实现。

https://www.w3.org/TR/webdriver/#perform-actions
https://github.com/jlipps/simple-wd-spec#perform-actions

调用WDA的Actions接口,我们可以直接通过W3C实现滑动,点击等动作,相比于WDA乌龟速度能提升一个档次。当然要实现多指的操作也是可以的,只不过对于浏览器用户来说此功能过于鸡肋,我们的产品并没有做,不知道开发此功能的某厂商的产品经理是如何思考的

举个例子:从屏幕上的x:100,y:100作为起点,向左滑动50
URL: “http://localhost:” + WDAPort+ “/session/” + sessionID + “/actions”
参数:

 {
   "actions": [
     {
       "type": "pointer",
       "id": "finger1",
       "parameters": {"pointerType": "touch"},
       "actions": [
         {"type": "pointerMove", "duration": 0, "x": 100, "y": 100},
         {"type": "pointerDown"},
         {"type": "pause", "duration": 100},
         {"type": "pointerMove", "duration": 200, "origin": "pointer", "x": -50, "y": 0},
         {"type": "pointerUp"}
       ]
     }
   ]
 }

第一个动作pointerMove作为起点移动光标,第二个动作为pointerDown将光标落下,pause为停留时间,下一个pointerMove中"origin": "pointer"指定当前光标位置为此次移动的起点(不指定的话会以0,0为起点),指定后x,y的数值为相对移动的数值。duration为间隔时间可自行调整,最后pointerUp抬起光标,完成动作。

三、键盘输入

图像有了,点击、滑动也能模拟了,那么用户需要输入文本内容怎么办,一下一下在键盘上点太繁琐了,最简单的暴力的就是直接通过键盘输入,WDA提供了时间键盘输入的接口,只不过很难找到相关的文档和介绍。
URL:“http://localhost:” + WDAport+ “/session/” + sessionID + “/wda/keys”
参数的话就是value和frequency两个,VALUE是内容,frequency是次数默认使用1就可以了

实现后你会发现效果并不理想,首先输入的效率很低,如果连续依次输入123456,很有可能输入的124365,顺序会错乱,另外如果输入的是一串中文的话,实际的效果会是一个字一个字的输。效率很低,目前市面上多数的云真机厂商所实现的iOS云真机的输入功能都没有达到和安卓设备同样的流畅度。主要是因为iOS并不像安卓那样可以随意的开发一个键盘应用放到手机里直接用。那么如何实现如安卓般丝滑的输入呢?
有的,依然是依靠W3C的actions

URL: “http://localhost:” + WDAPort+ “/session/” + sessionID + “/actions”
参数:

 {
   "actions": [
     {
       "type": "key",
       "id": "keyboard",
       "actions": [
         {"type": "keyDown", "value": "a"},
         {"type": "keyUp", "value": "a"}
       ]
     }
   ]
 }

速度直接提升一个档次,缺点是每次只能输入一个字符,如果是一串中文的话需要循环调一下,不过还是比WDA的接口快很多,而且顺序不会错乱。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值