最近抽空搞好了 iOS17 的自动化,在这里分享下经验吧。我的项目是基于 WDA 改造的,启动用的是 tidevice。
1,tidevice 无法启动 iOS17 以上的 WDA,因此重新用回了 xcodebuild 命令启动,也能正常使用。最近开帖子有了个 tidevice3 好像是可以直接支持 iOS17 的,以后抽时间再弄。
2,iOS 17 获取 element 属性稍微有点变化,原来用的 wdValue、wdLable 这些字段都没了,需要自己改造处理一下,用 label 或 ID 字段来替代。
3,iOS 17 的 element 属性空值也有变化,空值需要自己转换成 nil 才能跟原来兼容。
4,最头疼的问题,iOS17 调用底层获取的 XCUIElement、Snapshot 等类返回之后,自定义的一些 category 分类就不生效了,应该是 iOS17 返回的时候底层把对象类型改了,导致跑自动化的时候很多 unrecognized selector...的错误。这个问题有 3 个解决思路:
1)具体调试打印,看对象类型什么时候呗修改的,这个需要大量时间,需要对 objectC 特别熟悉,修复底层代码应该可以彻底解决这个问题,本人是没有那个能力和时间了,调试了 2 天解决不了换其它方式了。
2)重新新建一个对象,新建的对象类型是没问题的,把 XC 底层返回的 element 之类的对象的值复制给新的对象,就可以正常跑了。
3)category 报错,我们就不用它,把我们在 category 上的函数提取到外面其它工具类里面去,算是绕开了这个问题,我当前使用的就是这个方式。

就写这些吧。


↙↙↙阅读原文可查看相关链接,并与作者交流