使用 Golang 来控制你的 iOS 设备~

2020-05-11 11:06:12 +08:00
 hongxi2200

有兴趣的小伙伴可以玩一玩哈~

https://github.com/ElectricBubble/gwda

Golang 实现的 WebDriverAgent 客户端库,可以使用 Golang 控制 iOS 设备,实现 UI 自动化操作。(无需越狱)

参考 facebook-wda (python): https://github.com/openatx/facebook-wda

几乎完成了 appium/WebDriverAgent 的全部命令(部分 tvOS 的因为没环境测试。。就暂时放弃了)

放一个示例代码的执行 GIF

😳其实执行速度还可以,只是 GIF 压缩感觉卡顿

下面是示例代码的执行输出:

2020/05/10 00:02:00 Name: TEST’s iPhone
2020/05/10 00:02:00 IsSimulator: false
2020/05/10 00:02:00 UIKit Size (Points): 375 x 667
2020/05/10 00:02:01 UIKit Scale factor: 2
2020/05/10 00:02:01 Native Resolution (Pixels): 750 x 1334
2020/05/10 00:02:02 Status bar size: 375 x 20
2020/05/10 00:02:02 State: Plugged in, at 100%
2020/05/10 00:02:02 Level: 100%
2020/05/10 00:02:02 该 App 未运行, 开始打开 App: com.apple.Preferences
2020/05/10 00:02:04 使当前 App 退回 主屏幕, 并至少等待 3s 后(默认等待时间)再切换到前台
2020/05/10 00:02:09 当前 App 的 PID: 3616
2020/05/10 00:02:33 搜索输入框 的截图图片格式: png
2020/05/10 00:02:33 搜索输入框 的截图图片大小(像素): (594,72)
2020/05/10 00:02:37 共找到 3 个搜索结果
2020/05/10 00:02:48 当前屏幕第一个 App/文件夹 的文本内容: “自带”文件夹
2020/05/10 00:02:48 该 App/文件夹 的坐标和大小: {
    "y" : 26,
    "x" : 199,
    "width" : 64,
    "height" : 88
  }
2020/05/10 00:02:57 Orientation: Device oriented vertically, home button on the bottom
2020/05/10 00:02:57 Rotation: {
    "x" : 0,
    "y" : 0,
    "z" : 0
  }

6647 次点击
所在节点    Go 编程语言
28 条回复
Leigg
2020-05-11 11:54:12 +08:00
大部分的操作都能模拟?获取元素位置,点击指定 app,回到主页,下滑上推这些
hongxi2200
2020-05-11 12:53:23 +08:00
@Leigg `WDA` 支持的命令全都可以的哟 😬
hongxi2200
2020-05-11 13:12:49 +08:00
@Leigg

// 查找符合条件第一个元素
session.FindElement()

// 查找符合条件的全部元素
session.FindElements()

// 查找指定元素的子元素(符合条件的第一个)
element.FindElement()

// 查找指定元素的子元素(符合条件的全部元素)
element.FindElements()

// 获取元素的坐标和宽高
elemIcon.Rect()

// 启动指定 app
session.AppLaunch()

// 回到主页
client.Homescreen()

// 上滑
session.SwipeUp()


项目的示例代码基本上都用到了这些基本命令哈
pmispig
2020-05-11 13:25:11 +08:00
请问能输入用户密码登陆吗,然后如果弹出警告点确认,这些都能做到不
oubfgiar
2020-05-11 13:29:01 +08:00
iOS 非越狱群控指日可待?[狗头]
yukiloh
2020-05-11 13:34:54 +08:00
原理是啥?
安卓的残疾人功能还真挺好,不过 autojs 最后转成收费,可惜
hongxi2200
2020-05-11 13:39:31 +08:00
@pmispig

弹窗也可以手动 /自动处理

⬇️ 弹窗自动处理 ⬇️
// 在连接设备的时候,追加一个 "true" 参数,用于在连接设备时,预设“允许 /拒绝”的选择器
// 允许: **/XCUIElementTypeButton[`label IN {'允许','好','仅在使用应用期间','暂不'}`]
// 拒绝: **/XCUIElementTypeButton[`label IN {'不允许','暂不'}`]
gwda.NewClient("http://localhost:8100", true)
// 👆 也可以选择不再连接设备时去预设选择器
// 通过下面两个函数也可以在创建 session 之前设置好想要设置的弹窗按钮选择器
// client.SetAcceptAlertButtonSelector()
// client.SetDismissAlertButtonSelector()

// 创建 session 时,设置当 Alert 出现时的默认处理行为( Accept/Dismiss )
// gwda.WDASessionAlertActionAccept
client.NewSession(
gwda.NewWDASessionCapability(bundleId).
SetDefaultAlertAction(gwda.WDASessionAlertActionAccept))


⬇️ 手动处理使用以下相关函数 ⬇️

// 获取弹窗的内容
session.AlertText()

// 在弹窗里的输入框输入内容
session.AlertSendKeys()

// 获取弹窗的全部按钮
session.AlertButtons()

// 点击指定“名称”的“yes”按钮
session.AlertAccept()

// 点击指定“名称”的“no”按钮
session.AlertDismiss()
pmispig
2020-05-11 13:42:01 +08:00
@hongxi2200 多谢~
hongxi2200
2020-05-11 13:45:35 +08:00
@yukiloh

简单粗暴的理解就是
gwda 发 HTTP 请求给 appium/WebDriverAgent ( forked from facebookarchive/WebDriverAgent )
WebDriverAgent 利用苹果提供的测试框架 XCTest.framework 进行设备的各种操作命令
hongxi2200
2020-05-11 13:46:39 +08:00
@oubfgiar

已经有好些个厂商做到了。。。
oubfgiar
2020-05-11 14:02:00 +08:00
@hongxi2200 厉害厉害!因为不接触这个,还真是孤陋寡闻了,哈哈。
hongxi2200
2020-05-11 14:05:26 +08:00
@oubfgiar

其实厉害的还是 Facebook 那帮子人
得亏他们写出来了 WDA ( WebDriverAgent )
aydd2004
2020-05-11 15:35:24 +08:00
不是吧 我找这个找了好久 但是不会 go 啊 我去
hongxi2200
2020-05-11 15:40:02 +08:00
@aydd2004

有 python 版本的话
stevenkang
2020-05-11 17:03:09 +08:00
感谢分享,先 star
hongxi2200
2020-05-11 17:54:20 +08:00
@stevenkang

😁 觉得好玩就行
magicdawn
2020-05-11 23:56:57 +08:00
请教下 appium 也是用 wda, macacajs 用他们自己写的 XCTestWD
为啥他们都需要 app or bundleId 配置, 如果只是控制手机, 这里 app or bundleid 应该填啥
troyl
2020-05-12 01:35:10 +08:00
这跟自带的 XCUITest 有啥区别吗?
hongxi2200
2020-05-12 08:57:01 +08:00
@magicdawn
可以简单的理解为 XCTestWD 就是 swift 版的 WDA ( WDA 使用的是 Objective-C )
Product Bundle Identifier 的修改是因为需要给 WDA-Runner (会通过 Xcode 安装到设备上)一个唯一的 🆔
修改的话,我是改成 com.个人域名.WebDriverAgentRunner (关于这个的修改,项目 README 里有安装的教程链接)

除了这个,还有苹果的 个人 /团队开发者账号 需要设置,个人账号是可以免费的,但是必须要联网验证证书哈
hongxi2200
2020-05-12 09:01:00 +08:00
@troyl
appium/WebDriverAgent 和 前面同学提到的 macacajs/XCTestWD 本质上都是使用的苹果的测试框架哈

这就好比是其实大家都可以通过浏览器的开发者模式的 控制台 输入对应的 js 实现页面元素的点击 /输入等操作
但是却出现了 selenium,然后觉得真香😃

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX