如题,最近公司看见 MTC 实现的远程真机,需要我去攻坚,但是由于技术储备以及对测试的不了解,没能攻克,希望在这里和大家一起讨论,一起解决这个问题。。。好东西一起分享嘛~~~
嘛,我先来说下我的大概思路吧:
先前不是有ios-minicap可以通过不断的自动截图来显示 iOS 页面的实时显示嘛,基于这个框架可以实现页面的回显。具体安装步骤可以看一下我在 CSDN 里面写的ios-minicap 安装使用指南
连接协议主要是用的 usbmuxd Proxy,这个主要还是通过libimobiledevice协议库来实现安装啊截图啊日志啊什么的
然后是 Facebook 提供的绝大多数都在使用的 WebdriverAgent,可以直接用 WebSocket 通讯发送命令 (ps:我的 WDA 特别傲娇各种找我麻烦,特别爱报 operation never finished bootstrapping 的错,https://testerhome.com/topics/9666,这里特别讲了一下我遇到的两个大麻烦)
有两个方案
一、是@codeskyblue 大神写的wdaproxy,看了下好像是用 go 语言写的,哇,萌新瑟瑟发抖 ing
大概是这样的:
tap: function(x, y) {
var self = this;
return $.ajax({
url: "/session/" + self.sessionId + "/wda/tap/0",
method: "POST",
data: JSON.stringify({
x: x,
y: y
}),
}).then(function(ret) {
if (ret.status !== 0) {
console.log(ret.value);
} else {
return "Success";
}
})
},
initScreenSize: function() {
$.\
({
url: "/status",
})
.then(function(ret) {
this.sessionId = ret.sessionId;
return $.ajax({
url: "/session/" + ret.sessionId + "/window/size",
})
}.bind(this))
.then(function(ret) {
this.display.width = ret.value.width;
this.display.height = ret.value.height;
}.bind(this))
},
这个其实是@weamylady 给我说的,so,有什么其他的想法也来讨论一下吧。
二、百度 MTC 项光特大佬提的,用 iOS 的私有 API XCEventGenerator 来实现不同类型的屏幕触控事件
关于这个要多谢@zhangzhao_lenovo 大神提供了两个地址:
swift:
https://github.com/zalando/SwiftMonkey/blob/master/SwiftMonkey/MonkeyXCTestPrivate.swift
oc 的 wda:
https://github.com/facebook/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCEventGenerator.h
或者通过iOS-Runtime-Headers来获取 iOS 的私有 API
还有个说法是:
通过 iproxy 工具把接口映射到宿主机
宿主机通过 curl 命令的方式实现对设备的控制
希望这篇文章对大家实现 iOS 远程真机有帮助,也希望得到其他大神朋友们的帮助,跪谢!
同时也很感谢 TesterHome 这个平台,让我学习了很多有用的东西,希望 TesterHome 越做越好!
照例,在最后 @ 几个大神防止帖子沉下去。。。。
@seveniruby @xdf @junhe (最近看着几位大神的文章比较多~~~~)
上周我开了这个讨论话题,多谢@seveniruby思寒的加精让我觉得这个话题还是有实现的必要性的~
现在我讲一下我现在觉得可行性较高的一套实现思路,希望社区里面大神们也帮我参考参考,也希望能帮助更多人得到 iOS 远程真机实现的思路。
首先,通过 ios-minicap,我们可以获取一个 Web 端的页面,这个页面通过不断的对真机进行截图实现实时显示真机页面的功能;
然后,我们可以通过 js 对获取到的 Web 页面进行事件控制(包括鼠标的拖拽,点击,长按等);
其次,我们可以使用 WDA 作为 PC 端与真机进行连接的工具,调用苹果的私有 API XCEventGenerator 来实现 PC 端对真机的触控事件;
再其次,通过 js 的事件控制来调用 WDA,实现 Web 端对 PC 端的操纵,最后达到 Web 端控制真机的触控;
最后,通过 ios-minicap 再实时回显真机上被 WDA 触控导致的操作,完成 iOS 远程真机的实现。
1.如何调用苹果的私有 API XCEventGenerator 来实现 PC 端对真机的触控事件
2.如何通过 js 实现鼠标的拖拽,点击,长按等事件,达到调用 WDA 的目的
时隔两个月,现在基本有了 iOS 远程真机的解决方案——iOS-remote,感谢 weamylady2 的分享,安装使用详情可见https://testerhome.com/topics/10466