Appium iOS xcode15 iOS17 暂时无法通过连接WIFI进行测试


macOS: 13.6.6
Xcode: 15.2
iPhone: 17.2.1
Appium: 2.5.4
XCUITest driver v7.15.2

由于公司的App业务里有需要连接耳机才能执行的场景,而iPhone 13就只有一个口,被USB占用了就无法连接耳机,于是想着能不能通过WiFi的方式执行用例。
在网上搜索了很多文章,有个帖子看到有人说iOS16都可以,可是手机升级到17就不行了,也就是说,是可以实现通过WiFi执行用例的?
于是我找啊找啊找,实验又实验,结果均以失败告终,然后收到了同事疑惑的眼神,仿佛在说,“是不是你不行啊?”
于是就有了这一篇文章,证明不是我的问题,😁。


iOS17以前和iOS17的区别

我们知道,Appium的iOS测试,是需要在设备本地安装WebDriverAgent这个应用,然后靠这个应用来操作被测应用的。而WebDriverAgent最初是Facebook在开发维护,后来移到了Appium项目里,我在Facebook的项目里找到了这么一句话:

Summary: With the introduction of CoreDevice with Xcode 15 and iOS 17, idb can no longer launch apps on physical devices. Apple has provided devicectl which can be used to launch apps on physical devices. This diff restores idb’s ability to launch apps on iOS 17 devices by using devicectl.

大致意思是,idb这个工具无法在iOS17上启动真实的iOS设备的App了,需要使用苹果提供的工具devicectl。

然后我又在appium-xcuitest-driver的文档里找到这么一句话:

iOS/tvOS 17+ speicic:
This method currently works over devicectl for iOS 17+ with Xcode 15+ environment since XCUITest driver v7.5.0. This may not work for tvOS 17+. iOS/tvOS 16 and lower ones work over appium-ios-device directly.

这句话大致的意思是,在XCUITest driver大于7.5.0的话,这个driver就不再使用appium-ios-decive了,而是使用devicectl。对的,又提到了这个devicectl。

那么我们来看看这个appium-ios-device是个啥。

appium-ios-device

这是appium-ios-device官方文档中摘取的一段话:

Appium API for dealing with iOS devices. This is mainly a rewrite of libimobiledevice in Node.js. The APIs allow Appium to talk directly to the phone over usbmuxd.
More information can be found at the links below:

  • libimobiledevice
  • iPhone Wiki

这个项目只是改用nodejs,重写了libimobiledevice这个项目,这个项目可以直接通过usbmuxd(另外个项目)来和手机设备沟通。

那么我们是不是又要看看libimobiledevice这个项目介绍了啥:

Some key features are:

  • Interface: Implements many high-level interfaces for device services
  • Implementation: Object oriented architecture and service abstraction layer
  • Cross-Platform: Tested on Linux, macOS, Windows and Android platforms
  • Utilities: Provides various command-line utilities for device services
  • SSL: Allows choosing between OpenSSL, GnuTLS, or MbedTLS to handle SSL communication
  • Network: Supports network connections with “WiFi sync” enabled devices
  • Python: Provides Cython based bindings for Python

加粗的那条可以看出来,这个项目可以实现用户通过WiFi连接就直接操作手机的应用。

那我们再来看看新的实现方案是怎么个情况。

devicectl

我在Appium的issue里找到这么一篇求助,说是xcode15,iOS17无法通过WiFi执行用例,然后有个人在底部回复了:
在这里插入图片描述
他用了一个“we”,说明他身份不简单,于是我点进去看了看:
在这里插入图片描述
应该是appium-xcuitest-driver的贡献者之一。可是为什么他们不支持,这个问题还是在困扰我。

我们从上文可以知道,iOS17设备使用的是XCUITest driver,也就是苹果他们自己的XCUITest工具。
于是我自己写了一个小demo,然后用XCUITest写了一句测试代码来执行用例。当我用usb连接的时候,可以顺利执行通这个用例。
但是当我断掉usb执行这个用例的时候(保证Connect via network勾选了,且保证连接usb时,勾选了设备的Show this iPhone when on Wi-Fi),可以成功安装执行用例需要的runner.app,但是启动不了被测App。

总结

于是真相大白了,在xcode15,iOS17之后,Appium使用的appium-xcuitest-driver在7.5.0之后修改了实现方式,从appium-ios-device(libimobiledevice)修改为苹果支持的devicectl方式。而苹果支持的方式,不支持通过WiFi执行用例。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值