tidevice 是阿里的内部的一个小组用来做 iOS 自动化用的工具。最近终于开源了出来。
所以这篇文章就来介绍一下这款工具。
项目地址 https://github.com/alibaba/taobao-iphone-device,请先点个 Star ,然后回来在看。
它有什么功能呢?
这个工具是纯 Python 写成的,所以也是跨平台的。也就是可以在能跑起来 Python 的 Windows、Linux、Mac 上运行。
其中网上最难找的应该是这个如何不依赖 xcode 启动 WebDriverAgent,这个工具就可以做到,原理的话可以翻源码。因为不依赖 Xcodebuild,所以就算你只有 Windows 或者 Linux 也能跑起来 iOS 自动化。
截止到发稿日期 2021/01/27,支持 iOS 手机的范围是 9.0-14.0
该工具是用 Python 写的,依赖 Python3.6+
安装方法
pip3 install -U tidevice
# 查看所有连接上的设备
$ tidevice list
List of apple devices attached
1234567892d8372eb752f413280722cdcc200954 iPhoneSE
# 截图
tidevice screenshot screenshot.jpg
# 启动苹果设置
tidevice launch com.apple.Preferences
# 查看已安装的第三方应用
tidevice applist
本来想录个视频的,但是 Windows 电脑还要去借,太麻烦了。就不录视频了。反正你知道 Windows 能跑就行。
第一步用数据线将 iPhone 手机连接到 PC 上,另外还需要手机上已经有WebDriverAgent这个 App 了。这个可以通过 xcode 编译源码安装,也可以用开发者证书重签名的 WebDriverAgent.ipa 安装到手机。
WebDriverAgent.ipa 在项目的 tests/testdata 目录下可以找到我之前打包好的。
启动就是一个命令 tidevice xctest
或者指定执行设备和 bundleId tidevice -u $UDID xctest -B $BUNDLE_ID
需要运行运行自动化的话,可以直接用 facebook-wda
或者用 iproxy 8100 8100
将服务映射出来用 Appium 或其他自动化框架连接也可以。
我觉的这种方式的优点
tidevice applist
tidevice reboot
tidevice screenshot
tidevice info
tidevice install https://.....ipa
更多功能参考
tidevice -h
我怕你忘记点 ,这里再贴一遍 https://github.com/alibaba/taobao-iphone-device
PS: 本小组正在招人,欢迎投递简历并留言。https://testerhome.com/topics/23010
膜拜大佬
另外日期是 2021 年?
有空试一下~~~
另外想问一下,如果在 Windows 上测 iOS,可以抓取元素吗? 例如 weditor 或者 appium inspector ?
大佬们都在做这种工具的东西 我们就只会拿开源的组合到一起。。而且组合的还不太行。。
膜拜大佬 orz,我们刚好有几个点卡在这上边
前排膜拜大佬
这段时间弄这个 xctest 直挠头,大佬牛逼,来炒个作业
正要考虑要不要找公司借一台 mac 跑自动化,这下好了,抽个时间就去试试,感谢大佬~
真赞啊,真及时,正想要这个功能!!!
有独立包吗?
神器
好东西!赞一个!
请问手机和电脑之间 wifi 连接方式支持么
大佬两个问题:
1.这一部已经成功,tidevice -u $UDID xctest -B $BUNDLE_ID 这时候怎么看 localhost:8100 ,页面打不开,怎么与 aietest 进行关联呢?
2.可否通过无线的方式建立连接
多谢大佬。
解决了 Windows 上不能做 ios 自动化的大问题 大佬牛逼!
大佬显示 ios 连接有问题
还有开发者证书重签名的 WebDriverAgent.ipa 应该只能安装在越狱设备上吧
点赞
赞,太强了
大佬求指教,用 wda 去自动化跑场景,收集性能数据时,发现跑一会手机就发烫严重,内存也升高很多,感觉 wda 对性能影响很大,这个有什么解决办法吗
1 和 2 不能从根本上解决问题,因为我用同一台手机,手动触发同样场景时,性能数据比较稳定,手机不怎么热
3 当前水平还不够。。
4 准备尝试用其他 app 试试,看看差异
5 有没有可能 wda 和被测 app 通信性能开销较大,或者 xcuitest 框架本身就有较大开销?xcuitest 自动运行应该和手动点点点调用 api 方式有所不同吧
执行
import wda
c = wda.USBClient()
print(c.info)
报:Unhandled endpoint: /session/7026A8F6-0569-4CFB-BE60-3F24BE4E59BE/wda/device/info -- http://127.0.0.1/ with parameters {
wildcards = (
"session/7026A8F6-0569-4CFB-BE60-3F24BE4E59BE/wda/device/info"
);
}
window 平台,怎么破啊,大佬
“iproxy 8100 8100 将服务映射出来用 Appium 或其他自动化框架连接”
请问 这个 具体 怎么在 window 上实现啊, 现在 想用 我们自己的 wda 测试下
windows 上怎么使用 iproxy 8100 8100 呢?需要怎么安装?
你这个看起来已经连接上了,只是 WDA 的版本没有支持/wda/device/info 这个接口。你试试print(c.status())
这个接口应该可以用的
可以查看 http://127.0.0.1:8100/status
返回是否正常,返回正常跑自动化肯定没问题,不正常的话检查端口转发、wda 是否启动成功
@codeskyblue 请问下 windows 上 想测试 自己的 wda, iproxy 端口 这个怎么实现啊
我也遇到了,只有 start_app stop_app 有问题会提示,其他都正常的。是不是和本身的 tidevice launch 冲突了?
File "D:\AirtestIDE-win-1.2.6\AirtestIDE\airtest\core\ios\wda_client.py", line 83, in httpdo
raise WDAError(r.status, r.value)
airtest.core.ios.wda_client.WDAError: WDAError(status=1, value=Unhandled endpoint: /session/54A497B2-033A-4977-8F53-17E727686FAB/wda/apps/launch -- http://127.0.0.1:8100/ with parameters {
wildcards = (
"session/54A497B2-033A-4977-8F53-17E727686FAB/wda/apps/launch"
);
})
弱弱的问一句,这个 ipa 怎么导出的,为啥我百度 xcode 导出 ipa 的方法最后有点不一样,导出来的是.xcarchive 文件,而不是.ipa
@codeskyblue 支持无线么?貌似都是通过 usb 通信的
命令行不太好传,增加了一个通过环境变量传参的方法 tidevice 0.1.3 tidevice xctest -e USE_PORT:8100
WebDriverAgent.ipa 如何重签打包?
@codeskyblue 我本地打包重签后,tidevice launch 正常,tidevice xctest 报错了,帮忙看下吧
运行后 tidevice xctest -B WebDriverAgentRunner -e USE_PORT:8100
提示
[I 210129 23:41:45 _device:955] Start execute test plan with IDE version: 29
[I 210129 23:41:46 _device:877] WebDriverAgent start successfully
但是浏览器访问:http://127.0.0.1:8100
依然无法打开。
百思不得其解。。。
你启动这个 tidevice xctest -B WebDriverAgentRunner 后
能访问http://127.0.0.1:8100吗?
我看你连上 airtest 了,我启动后这个总是不通,所以一直无法连 airtest 的。。。
大佬 help。。
我有看到这个文档,但是 Airtest 的 iOS-target 好像打不出来,能把帮忙看看这个可以打包出来吗?https://github.com/AirtestProject/iOS-Tagent
为啥我 Windows 下会提示 An unknown server-side error occurred while processing the command. Original error: Could not determine Xcode version: Could not find path to Xcode by symlinks located in /var/db/xcode_select_link, or /usr/share/xcode-select/xcode_dir_link
有人在 Windows 下用 Appium 调成功了吗
@codeskyblue 大佬,可以修改一下 tidevice/_device.py 中写死的 WebDriverAgentRunner 路径么,这个可以通过 app_info 获取,这样我就不仅可以通过 tidevice 启动 wda,而且也可以启动其他应用(比如我还可以启动 iOS monkey 了)
_launch_wda 方法下实测可以启动不同的应用
app_info = self.installation.lookup(bundle_id)
sign_identity = app_info.get("SignerIdentity", "")
logger.info("SignIdentity: %r", sign_identity)
app_container = app_info['Container']
target = app_info.get("CFBundleName").split("-")[0]
xctest_path = "/tmp/{}-".format(target) + str(session_identifier).upper() + ".xctestconfiguration" # yapf: disable
xctest_content = bplist.objc_encode(bplist.XCTestConfiguration({
"testBundleURL": bplist.NSURL(None, "file://" + app_info['Path'] + "/PlugIns/{}.xctest".format(target)),
"sessionIdentifier": session_identifier,
})) # yapf: disable
有空试试,顶一下大佬。
win 电脑想搞 ios 的福音啊,但是 wda 安装也得用到 xcode 来编译打包?楼主大佬可否出个 windows-ios 平台安装 wda+tidevice+appium 得教程
优秀,弱弱问下性能测试啥时候支持呢
请问支持 Ios 模拟器吗?用模拟器的 udid,提示 no match
请教下,安装 ipa 包时,这个报错如何解决一下
请问支持 iOS 性能收集了吗?求解~
请教一下,这是哪里出错了呀
@yanderder 兄台,你这个问题解决了么,我也碰到你这个问题了
@yanderder 我是个人开发者账号啊。。。
好东西,感谢大佬,感谢阿里开源,之前楼主的 uiautomator2 就很好用,正准备去尝试 appium 做 iOS 自动化,现在可以试试这个了。
我通过包名启动 WebDriverAgent,报错:AssertionError: Invalid CFBundleExecutable: YYMobile
请教一下大佬是什么原因?
我发现 tidevice 启动 wda 后,直接调用 wda 的接口(如启动 app、获取控件树、控件查找等),在第一次的时候回特别慢,有时候多达五六分钟,难以忍受(health 检查会很快返回),请问您知道吗,有什么优化的点吗?
是不是用的 WDA 有问题,或者是 app 的问题,你试试启动个系统 app 试试 com.apple.Preferences
测试了下,发现是 app 的包名在手机上不存在,启动 app 也能成功,但是会耗时很长时间,包名正确很快就可以启动了
$ tidevice -u 5ef7f64cacb615d9172ebf0fa4377e7b172af89f xctest -B com.facebook.WebDriverAgentRunner.xctrunner
[I 210226 17:25:01 _device:909] BundleID: com.facebook.WebDriverAgentRunner.xctrunner
[I 210226 17:25:01 _device:911] DeviceIdentifier: xxx
[I 210226 17:25:02 _device:773] SignIdentity: xxx
[I 210226 17:25:02 _device:840] Launch 'com.facebook.WebDriverAgentRunner.xctrunner' pid: 257
[I 210226 17:25:02 _device:1003] ProductVersion: 12.0
[W 210226 17:25:02 _instruments:560] unexpected error: socket connection broken
[W 210226 17:25:02 _device:1033] xctrunner quited
貌似 tidevice 无法在低版本的 iOS 设备上启动,发现不止一个设备了,请问是这样吗?