有兴趣的小伙伴可以玩一玩哈~
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 }
增加了一个 某东
的每日领取 J豆
的脚本,感兴趣的可以直接运行体验一下 gwda 的小魅力哈 daily-bean
更新了 gwda 的扩展库 gwda-ext-opencv
可直接通过指定图片进行操作啦
![]() | 1 Leigg 2020-05-11 11:54:12 +08:00 via Android 大部分的操作都能模拟?获取元素位置,点击指定 app,回到主页,下滑上推这些 |
![]() | 2 hongxi2200 OP @Leigg `WDA` 支持的命令全都可以的哟 |
![]() | 3 hongxi2200 OP @Leigg // 查找符合条件第一个元素 session.FindElement() // 查找符合条件的全部元素 session.FindElements() // 查找指定元素的子元素(符合条件的第一个) element.FindElement() // 查找指定元素的子元素(符合条件的全部元素) element.FindElements() // 获取元素的坐标和宽高 elemIcon.Rect() // 启动指定 app session.AppLaunch() // 回到主页 client.Homescreen() // 上滑 session.SwipeUp() 项目的示例代码基本上都用到了这些基本命令哈 |
![]() | 4 pmispig 2020-05-11 13:25:11 +08:00 请问能输入用户密码登陆吗,然后如果弹出警告点确认,这些都能做到不 |
5 oubfgiar 2020-05-11 13:29:01 +08:00 via iPhone iOS 非越狱群控指日可待?[狗头] |
6 yukiloh 2020-05-11 13:34:54 +08:00 原理是啥? 安卓的残疾人功能还真挺好,不过 autojs 最后转成收费,可惜 |
![]() | 7 hongxi2200 OP @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() |
![]() | 8 pmispig 2020-05-11 13:42:01 +08:00 @hongxi2200 多谢~ |
![]() | 9 hongxi2200 OP ![]() @yukiloh 简单粗暴的理解就是 gwda 发 HTTP 请求给 appium/WebDriverAgent ( forked from facebookarchive/WebDriverAgent ) WebDriverAgent 利用苹果提供的测试框架 XCTest.framework 进行设备的各种操作命令 |
![]() | 10 hongxi2200 OP |
11 oubfgiar 2020-05-11 14:02:00 +08:00 via iPhone @hongxi2200 厉害厉害!因为不接触这个,还真是孤陋寡闻了,哈哈。 |
![]() | 12 hongxi2200 OP |
![]() | 13 aydd2004 2020-05-11 15:35:24 +08:00 via iPhone 不是吧 我找这个找了好久 但是不会 go 啊 我去 |
![]() | 14 hongxi2200 OP |
![]() | 15 stevenkang 2020-05-11 17:03:09 +08:00 感谢分享,先 star |
![]() | 16 hongxi2200 OP |
![]() | 17 magicdawn 2020-05-11 23:56:57 +08:00 请教下 appium 也是用 wda, macacajs 用他们自己写的 XCTestWD 为啥他们都需要 app or bundleId 配置, 如果只是控制手机, 这里 app or bundleid 应该填啥 |
18 troyl 2020-05-12 01:35:10 +08:00 via iPhone 这跟自带的 XCUITest 有啥区别吗? |
![]() | 19 hongxi2200 OP ![]() @magicdawn 可以简单的理解为 XCTestWD 就是 swift 版的 WDA ( WDA 使用的是 Objective-C ) Product Bundle Identifier 的修改是因为需要给 WDA-Runner (会通过 Xcode 安装到设备上)一个唯一的 修改的话,我是改成 com.个人域名.WebDriverAgentRunner (关于这个的修改,项目 README 里有安装的教程链接) 除了这个,还有苹果的 个人 /团队开发者账号 需要设置,个人账号是可以免费的,但是必须要联网验证证书哈 |
![]() | 20 hongxi2200 OP @troyl appium/WebDriverAgent 和 前面同学提到的 macacajs/XCTestWD 本质上都是使用的苹果的测试框架哈 这就好比是其实大家都可以通过浏览器的开发者模式的 控制台 输入对应的 js 实现页面元素的点击 /输入等操作 但是却出现了 selenium,然后觉得真香 |
![]() | 21 JRay 2020-05-12 09:03:50 +08:00 稳,空了来试试 |
![]() | 22 hongxi2200 OP @JRay 再增加个搜图功能,那就可以更好玩了 |
![]() | 23 JRay 2020-05-12 09:16:39 +08:00 @hongxi2200 搜图? 怎么玩儿? |
![]() | 24 hongxi2200 OP @JRay // 这三个都拥有三种截图函数 client.ScreenshotToImage() session.ScreenshotToDisk() element.Screenshot() client/session 都可以截图整个屏幕 有了“大图”,然后拿出你想要点击位置的“小图”, 就可以 “大图” 里 “小图”,并对应的找到 “小图” 所在的坐标 然后就可以让 gwda 去点击啦 不过这块儿我还在考虑该咋弄。。 直接上 opencv 的话。。会不会有点大材小用? 但的确后面可能需要 opencv 的 sift 算法,可以做到一张图在不同缩放的分辨率图片上找到“小图” |
![]() | 25 hongxi2200 OP @JRay 更新了 gwda 的扩展库 [gwda-ext-opencv]( https://github.com/electricbubble/gwda-ext-opencv) 可直接通过指定图片进行操作啦 |
![]() | 26 lekai63 2020-05-24 10:29:21 +08:00 666~ 话说为什么我看到这玩意儿的第一反映是 可以拿来在 iOS 上自动刷强国? |
![]() | 27 hongxi2200 OP |
28 aukw 2023-06-13 10:02:06 +08:00 很 cool ! |