ATX tidevice 开源:不依赖 Xcode 也能启动 WDA

codeskyblue · 2021年01月27日 · 最后由 sheris 回复于 2023年07月14日 · 43056 次阅读
本帖已被设为精华帖!

简介

tidevice 是阿里的内部的一个小组用来做 iOS 自动化用的工具。最近终于开源了出来。
所以这篇文章就来介绍一下这款工具。

项目地址 https://github.com/alibaba/taobao-iphone-device,请先点个 Star ⭐ ,然后回来在看。

它有什么功能呢?

  • 截图
  • App 安装,启动,停止,查看
  • 启动 WebDriverAgent
  • 性能采集(类似 PerfDog)
  • 功能还在不停的扩展中

这个工具是纯 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

截图、App 启动等一些常规操作

# 查看所有连接上的设备
$ tidevice list
List of apple devices attached
1234567892d8372eb752f413280722cdcc200954 iPhoneSE

# 截图
tidevice screenshot screenshot.jpg

# 启动苹果设置
tidevice launch com.apple.Preferences

# 查看已安装的第三方应用
tidevice applist

启动 WebDriverAgent 演示

本来想录个视频的,但是 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 或其他自动化框架连接也可以。

我觉的这种方式的优点

  1. 启动速度快(基本都在 1s 内)
  2. CPU、Memory 占用率低,可以实现 1 台电脑挂载 10+ iPhone 设备的需求
  3. 不限操作系统。Linux,Windows 也可以。不过还是有条件上 Mac,也就贵一点而已。
  4. 最重要的就是这种方式稳定性高。

其他功能

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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 178 条回复 时间 点赞


怎么解决,各位大佬有碰到吗

cmlanche 回复

升级升级 tidevice 就好了

codeskyblue · #3 · 2021年01月27日 Author
仅楼主可见

另外想问一下,如果在 Windows 上测 iOS,可以抓取元素吗? 例如 weditor 或者 appium inspector ?

Jerry li 回复

可以

大佬们都在做这种工具的东西 我们就只会拿开源的组合到一起。。而且组合的还不太行。。

前排膜拜大佬

这段时间弄这个 xctest 直挠头,大佬牛逼,来炒个作业😝

正要考虑要不要找公司借一台 mac 跑自动化,这下好了,抽个时间就去试试,感谢大佬~

真赞啊,真及时,正想要这个功能!!!

有独立包吗?

好东西!赞一个!

请问手机和电脑之间 wifi 连接方式支持么

大佬两个问题:
1.这一部已经成功,tidevice -u $UDID xctest -B $BUNDLE_ID 这时候怎么看 localhost:8100 ,页面打不开,怎么与 aietest 进行关联呢?
2.可否通过无线的方式建立连接

多谢大佬。

cmlanche 回复

别忘了点 Star

codeskyblue 回复

不用说,早就 star 点赞转发三连了

陈恒捷 将本帖设为了精华贴 01月28日 17:06

解决了 Windows 上不能做 ios 自动化的大问题 大佬牛逼!

codeskyblue 回复

但是你发的这个 webdriverAgent 是越狱版的呀 安装不起


大佬显示 ios 连接有问题

Morii 回复

😂 我也是一样的问题,还没解决。。。

哲豪 回复

已解决 要安装 iTunes

还有开发者证书重签名的 WebDriverAgent.ipa 应该只能安装在越狱设备上吧

赞,太强了

Morii 回复

开发者证书重签名一下也可以

大佬求指教,用 wda 去自动化跑场景,收集性能数据时,发现跑一会手机就发烫严重,内存也升高很多,感觉 wda 对性能影响很大,这个有什么解决办法吗😇

Jacc 回复

提供几个方法哈

  1. 装个风扇
  2. 换个手机
  3. 重写一下 WDA
  4. 证明一下是被测应用的问题,而不是 WDA
  5. 其他

执行
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 平台,怎么破啊,大佬

Morii 回复

好的 谢谢,这就去试试

“iproxy 8100 8100 将服务映射出来用 Appium 或其他自动化框架连接”
请问 这个 具体 怎么在 window 上实现啊, 现在 想用 我们自己的 wda 测试下😔

windows 上怎么使用 iproxy 8100 8100 呢?需要怎么安装?

TD 回复

windows 上应该要用 adb forward 了吧

xu 回复

你这个看起来已经连接上了,只是 WDA 的版本没有支持/wda/device/info 这个接口。你试试print(c.status()) 这个接口应该可以用的

cmlanche 回复

adb 是用于 Android 的吧

codeskyblue 回复

问下,wda 是怎么打包成 ipa 的?

@codeskyblue 请问下 windows 上 想测试 自己的 wda, iproxy 端口 这个怎么实现啊

1 和 2 不能从根本上解决问题,因为我用同一台手机,手动触发同样场景时,性能数据比较稳定,手机不怎么热
3 当前水平还不够。。
4 准备尝试用其他 app 试试,看看差异
5 有没有可能 wda 和被测 app 通信性能开销较大,或者 xcuitest 框架本身就有较大开销?xcuitest 自动运行应该和手动点点点调用 api 方式有所不同吧

xu 回复

可以查看 http://127.0.0.1:8100/status 返回是否正常,返回正常跑自动化肯定没问题,不正常的话检查端口转发、wda 是否启动成功

Jacc 回复

我也遇到了,只有 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"
);
})

TD 回复

我在 Mac 用 appium 试的可以,airtest 不太了解,要不你用 py-wda 试试?

Morii 回复

弱弱的问一句,这个 ipa 怎么导出的,为啥我百度 xcode 导出 ipa 的方法最后有点不一样,导出来的是.xcarchive 文件,而不是.ipa

TD 回复

我直接在他上传的文件目录拿到的
但是这个 ipa 需要重新签名 所以还是用 xcode 重新编译 wda 安装到你手机上把

匿名 #51 · 2021年01月29日

@codeskyblue 支持无线么?貌似都是通过 usb 通信的

YueChen 回复

命令行不太好传,增加了一个通过环境变量传参的方法 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
依然无法打开。
百思不得其解。。。

TD 回复

你启动这个 tidevice xctest -B WebDriverAgentRunner 后
能访问http://127.0.0.1:8100吗?
我看你连上 airtest 了,我启动后这个总是不通,所以一直无法连 airtest 的。。。
大佬 help。。

xu 回复

加个 iproxy 8100 8100 就可以了

codeskyblue 回复

我有看到这个文档,但是 Airtest 的 iOS-target 好像打不出来,能把帮忙看看这个可以打包出来吗?https://github.com/AirtestProject/iOS-Tagent

xu 回复

我是用了 itunnel_mux.exe --iport 8100 --lport 8100 这个工具,你可以搜看看

TD 回复

为啥我 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 调成功了吗

匿名 #62 · 2021年02月01日

@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

可以啊,要不要提个 pr 啊,坑位给你留着

匿名 #64 · 2021年02月01日
codeskyblue 回复

晚点提,公司电脑访问 github 只有读权限

有空试试,顶一下大佬。

win 电脑想搞 ios 的福音啊,但是 wda 安装也得用到 xcode 来编译打包?楼主大佬可否出个 windows-ios 平台安装 wda+tidevice+appium 得教程🙋

太为难我了,我其实没 windows 电脑的,只有找别人借才行

codeskyblue 回复

嗯嗯,俺们自己先研究一波,感谢分享,已 star 已三连

优秀,弱弱问下性能测试啥时候支持呢😉

TD 回复

我是 windows 机器。。。所以还是运行不了:http://127.0.0.1:8100

Yu 回复

这个怎么用,还是不行。。大佬,救我。

codeskyblue 回复

就凭能在 windows 上跑 ios 就能吹爆,大佬牛逼,已 fork

请问支持 Ios 模拟器吗?用模拟器的 udid,提示 no match

Wei Chuang 回复

你试试 facebook 的 idb,我看文档感觉操作模拟器还挺方便的


请教下,安装 ipa 包时,这个报错如何解决一下🙋

用 python3.8 就不会报错了

linpengcheng 回复

好的,我试试,谢谢

请问支持 iOS 性能收集了吗?求解~

是 swiftmonkey 吗,能跑起来吗?

@yanderder 兄台,你这个问题解决了么,我也碰到你这个问题了

匿名 #84 · 2021年02月08日
Wei Chuang 回复

是的,可以跑呀

@yanderder 我是个人开发者账号啊。。。

好东西,感谢大佬,感谢阿里开源,之前楼主的 uiautomator2 就很好用,正准备去尝试 appium 做 iOS 自动化,现在可以试试这个了。

python 升级到 3.7+ 就可以

我通过包名启动 WebDriverAgent,报错:AssertionError: Invalid CFBundleExecutable: YYMobile
请教一下大佬是什么原因?

你这个 com.yy.enterprise.yyvoice 不是 WebDriverAgent 吧

codeskyblue 回复

我发现 tidevice 启动 wda 后,直接调用 wda 的接口(如启动 app、获取控件树、控件查找等),在第一次的时候回特别慢,有时候多达五六分钟,难以忍受(health 检查会很快返回),请问您知道吗,有什么优化的点吗?

cmlanche 回复

是不是用的 WDA 有问题,或者是 app 的问题,你试试启动个系统 app 试试 com.apple.Preferences

codeskyblue 回复

测试了下,发现是 app 的包名在手机上不存在,启动 app 也能成功,但是会耗时很长时间,包名正确很快就可以启动了

codeskyblue 回复
$ 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 设备上启动,发现不止一个设备了,请问是这样吗?

cmlanche 回复

12.0 我这测试应该是支持的。你的 SignIdentity 是啥

codeskyblue 回复

SignIdentity 是 Apple Development: xxx (GC2H3795Y8)

也是使用的 12.0

codeskyblue 回复

这个 12.0 的设备升级到 14.4 之后,启动 wda 报错:

58:14 _device:518] ProductVersion: 14.4
[I 210301 15:58:14 _device:497] Download https://tool.appetizer.io/iGhibli/iOS-DeviceSupport/raw/master/DeviceSupport/14.4.zip -> /Users/chengming/.tidevice/device-support/14.4.zip
[I 210301 15:58:15 _device:497] Download https://github.com/iGhibli/iOS-DeviceSupport/raw/master/DeviceSupport/14.4.zip -> /Users/chengming/.tidevice/device-support/14.4.zip
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 400, in start_service
    return self._unsafe_start_service(name)
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 415, in _unsafe_start_service
    raise MuxServiceError("Could not start service: {0}! {2}".format(
tidevice.exceptions.MuxServiceError: Could not start service: com.apple.testmanagerd.lockdown.secure! Remember that you have to mount the Developer disk image on your device

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 550, in _request_developer_image_dir
    self._urlretrieve(mirror_url, image_zip_path)
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 502, in _urlretrieve
    r.raise_for_status()
  File "/usr/local/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://tool.appetizer.io/iGhibli/iOS-DeviceSupport/raw/master/DeviceSupport/14.4.zip

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/tidevice", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.9/site-packages/tidevice/__main__.py", line 407, in main
    actions[args.subparser](args)
  File "/usr/local/lib/python3.9/site-packages/tidevice/__main__.py", line 203, in cmd_xctest
    d.xctest(args.bundle_id, logger=setup_logger(level=logging.INFO))
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 921, in xctest
    x1 = self._connect_testmanagerd_lockdown()
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 741, in _connect_testmanagerd_lockdown
    conn = self.start_service(
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 402, in start_service
    self.mount_developer_image()
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 585, in mount_developer_image
    with self._request_developer_image_dir() as _dir: #, signature_path:
  File "/usr/local/Cellar/python@3.9/3.9.1_6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/contextlib.py", line 117, in __enter__
    return next(self.gen)
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 554, in _request_developer_image_dir
    self._urlretrieve(origin_url, image_zip_path)
  File "/usr/local/lib/python3.9/site-packages/tidevice/_device.py", line 502, in _urlretrieve
    r.raise_for_status()
  File "/usr/local/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://github.com/iGhibli/iOS-DeviceSupport/raw/master/DeviceSupport/14.4.zip

无法下载:https://github.com/iGhibli/iOS-DeviceSupport/raw/master/DeviceSupport/14.4.zip

codeskyblue 回复

果然,感谢!

codeskyblue 回复


感谢大佬提醒,现在可以了

有人实践过吗?速度怎么样

已经投入使用了,速度很快

速度很快,很灵活,值得推荐

WebDriverAgent.ipa 在项目的 tests/testdata 目录下可以找到我之前打包好的。

没有找到这个文件呀?

🔥🔥🔥 回复

我嫌太大,占空间,就删了

🔥🔥🔥 回复

可以找历史记录,恢复一下就有了

Windows appium 桌面的版本, webdriver 似乎获取不到,appium 启动会报错, [info] [35m[Appium][39m Welcome to Appium v1.17.1
[info] [35m[Appium][39m Non-default server args:
[info] [35m[Appium][39m allowInsecure: {
[info] [35m[Appium][39m }
[info] [35m[Appium][39m denyInsecure: {
[info] [35m[Appium][39m }
[info] [35m[Appium][39m Appium REST http interface listener started on 0.0.0.0:4723[info] [35m[HTTP][39m [37m-->[39m [37mPOST[39m [37m/wd/hub/session[39m
[
[debug] [35m[BaseDriver][39m Event 'newSessionRequested' logged at 1614848011695 (16:53:31 GMT+0800 (中国标准时间))
[info] [35m[Appium][39m Appium v1.17.1 creating new XCUITestDriver (v3.22.0) session
[debug] [35m[BaseDriver][39m Creating session with MJSONWP desired capabilities: {
[debug] [35m[BaseDriver][39m "app": "com.xxxxxx",
[debug] [35m[BaseDriver][39m "automationName": "XCUITest",
[debug] [35m[BaseDriver][39m "deviceName": "rock",
[debug] [35m[BaseDriver][39m "platformName": "iOS",
[debug] [35m[BaseDriver][39m "platformVersion": "14.0",
[debug] [35m[BaseDriver][39m "udid": "xxxxxxxx",
[debug] [35m[BaseDriver][39m "useNewWDA": true,
[debug] [35m[BaseDriver][39m "newCommandTimeout": 0,
[debug] [35m[BaseDriver][39m "connectHardwareKeyboard": true
[debug] [35m[BaseDriver][39m }
[info] [35m[BaseDriver][39m Session created with session id: 18c8eb20-1a3a-4adc-aeba-935bc0b04e00
[debug] [35m[ios-device][39m Error: The usbmuxd socket at '/var/run/usbmuxd' does not exist or is not accessible、

请问怎么解决的,我是用个人签名在 xcode 上编译安装的,安装后名字叫 IntergrationApp,执行 “tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner”,报的错误跟你截图类似,只是 “YYmobile” 变成了 “IntergrationApp”

@YY 在 appium 启动 WDA 之前启动 WDA 就可以了。windows 貌似会有一些兼容性问题,会提示 xcodebuild 找不到

请问 windows+appium 成功了么?wda 启动成功后,怎么执行自动化啊?

xu 回复

请问一下 在 win+tidevice 的自动化执行起来了吗?wda 拉起来之后,怎么启动 appium server 啊

同样的错误,请问解决了么?

codeskyblue 回复

大佬,已加星。请有时间把 appium 的简要说一下,添加到 wiki 一下。今天只是把 facebook-wda 的方式基本看明白了,但是现在我已经基于 appium 搞得自动化框架,如果要按照 facebook-wda 的方式,底层的接口要重新封装。

Yu 回复

请问你 win+tidevice 调试成功了么

大佬下午好,这两天琢磨了一下,还是没有琢磨出来,有两个问题请教一下,请有时间答复一下,十分感谢。
1、tidevice 能在 win 在拉起 wda,如果要执行自动化是不是只能 facebook-wda 的来执行自动化?如果基于 appium 来搞,需要修改什么内容么,始终感觉 usbmux 这里会有问题。
2、如果用 facebook-wda 的方式,如果来查找元素呢?
大佬十分感谢

codeskyblue 回复

嗯,是 usbmux 报错了,还是找的/var/run/usbmuxd,这个应该是 mac 的路径,但是在 win+appium 过程中,还是找的这个路径;我看 facebook-wda 中,在 win 系统,usbmuxd 的地址是(127.0.0.1, 27015),不知道这里怎么处理

阿三 Win 下成功 Appium+iOS 自动化 中提及了此贴 03月25日 20:20
YY 回复

我也是遇到相同的难题了, 怎么和 iOS 通信,是否还需要装新的软件

我是用的 facebook-wda,就是下面需要再封装一次了

codeskyblue 回复

大佬,现在隐藏键盘还不能用,是么?

codeskyblue 回复

另外想问一下,如果在 Windows 上测 iOS,可以抓取元素吗? 例如 weditor 或者 appium inspector ? 具体是怎么操作的,十分想了解如何在 windows 上抓取 ios 元素

配置如下

desiredCapabilities.setCapability(IOSMobileCapabilityType.WEB_DRIVER_AGENT_URL, "http://127.0.0.1:8100");
desiredCapabilities.setCapability("noReset", true);
desiredCapabilities.setCapability(IOSMobileCapabilityType.USE_PREBUILT_WDA, false);
desiredCapabilities.setCapability("useXctestrunFile", false);
desiredCapabilities.setCapability("skipLogCapture", true);
desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 80000);
可以调通了,而且以获得 iOSDriver,成功了
io.appium.java_client.ios.IOSDriver, Capabilities: {browserName=, bundleId=XXX, databaseEnabled=false, deviceName=XXX, javascriptEnabled=true, locationContextEnabled=false, networkConnectionEnabled=false, newCommandTimeout=80000, noReset=true, platform=MAC, platformName=iOS, platformVersion=14.0, skipLogCapture=true, takesScreenshot=true, udid=XXXX, usePrebuiltWDA=false, useXctestrunFile=false, webDriverAgentUrl=http://127.0.0.1:8100, webStorageEnabled=false}

10054, '远程主机强迫关闭了一个现有的连接。这个报错你遇过吗,环境搭好了,没启动成功

另外 windows 上查看 ios app 的控件知道咋弄吗

回复

把报错的信息贴出来把

[Appium] Creating new XCUITestDriver (v2.133.1) session
[Appium] Capabilities:
[Appium] automationName: XCUITest
[Appium] platformName: ios
[Appium] platformVersion: 12.2
[Appium] deviceName: iphone
[Appium] udid: d822f7b41aa3e5a177df4c13fee14acfbefd63df
[Appium] bundleId: cn.tsign.esign
[Appium] webDriverAgentUrl: http://127.0.0.1:8100
[Appium] noReset: true
[Appium] usePrebuiltWDA: false
[Appium] useXctestrunFile: false
[Appium] skipLogCapture: true
[debug] [BaseDriver] W3C capabilities and MJSONWP desired capabilities were provided
[BaseDriver] Falling back to MJSONWP desired capabilities
[BaseDriver] Session created with session id: f49dd5d5-3ae9-4a2f-90db-777389b1ebdf
[debug] [XCUITest] Current user: 'hz\chennan'
uncaughtException: connect ENOENT /var/run/usbmuxd
{"date":"Mon Mar 29 2021 21:16:59 GMT+0800 (GMT+08:00)","process":{"pid":30008,"uid":null,"gid":null,"cwd":"D:\UICrawler","execPath":"C:\Program Files\nodejs\node.exe","version":"v12.18.3","argv":["C:\Program Files\nodejs\node.exe","C:\Users\chennan\AppData\Roaming\npm\node_modules\appium\build\lib\main.js"],"memoryUsage":{"rss":156278784,"heapTotal":128876544,"heapUsed":88516008,"external":2908613,"arrayBuffers":1368868}},"os":{"loadavg":[0,0,0],"uptime":3412934},"trace":[{"column":16,"file":"net.js","function":"PipeConnectWrap.afterConnect [as oncomplete]","line":1141,"method":"afterConnect [as oncomplete]","native":false}],"stack":["Error: connect ENOENT /var/run/usbmuxd"," at PipeConnectWrap.afterConnect as oncomplete"]}

请问大佬,WDA 在 xcode 编译安装后,名字为啥叫 IntegrationApp,执行 tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner(查了包名,就是这个名字)报 “AssertionError: Invalid CFBundleExecutable: IntegrationApp”

Scheme 选错了吧 @liuau86

codeskyblue 回复

非常感谢,我又找了下开发,开发选择红框这个无法打包安装,只能编译,是因为缺了什么吗?我从 git 上下载的 WDA 压缩包

liuau86 回复

开发选择红框这个无法打包安装,只能编译

具体是怎么无法打包安装,有具体截图或者错误信息之类的吗?

能编译通过,应该就能安装。你用 run test 这样的方式运行,就会自动装上了。装上的标志是手机里面会有一个 WebDriverAgent 的应用,图标类似下图这样:

阿三 Win 下成功 Appium+iOS 自动化 中提及了此贴 04月06日 10:22

有没有人在 Linux 的 docker 容器里面连接 iphone 手机成功执行 ios 自动化的?求指导。。。

TD 回复

docker 也是可以的,记得加上 -v /var/run/usbmuxd:/var/run/usbmuxd

codeskyblue 回复

好的,加了这个就可以了,谢谢~

雷系泡泡 Golang 版 libimobiledevice 中提及了此贴 04月14日 14:02


有哪位大佬 帮忙解答下。 tidevice xctest 后,直接退出。是什么原因。

换个低版本的系统的 正常

现在不需要用这个了,更新 tidevice,使用 tidevice -u xxx relay 8100 8100 就好了

TD 回复

已更新,确实。大赞

接口测试工具的话可以试试国产的接口测试工具 apipost,使用起来很方便简介,不需要安装环境,全中文使用起来方便。下载地址:https://www.apipost.cnwww.apipost.cn

性能采集(类似 PerfDog)不过这块暂时只有 API 可以用。 大佬 这个 api 在哪边

_YI 回复

项目首页上有写,现在命令行也能用了

大佬,花名是啥,求认识@codeskyblue

codeskyblue 回复

取样了 50 秒,操作 app 非命令行执行, cpuUsage 指标没有输出记录

_YI 回复

bundleId 没写错吧

codeskyblue · #151 · 2021年05月17日 Author
仅楼主可见
codeskyblue 回复

😂 写错了,没替换

@codeskyblue
接入 14.0 系统的 ios 设备,界面有了但是点击没反应, 提示这个……
大神求解

Exception in thread perf:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tidevice/_perf.py", line 247, in append_data
for _type, data in idata:
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tidevice/_perf.py", line 234, in iter_network_flow
for nstat in d.instruments.iter_network():
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tidevice/_instruments.py", line 958, in iter_network
channel_id = self.make_channel(channel_name)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tidevice/_instruments.py", line 315, in make_channel
result = self.call_message(0, '_requestChannelWithCode:identifier:', aux)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tidevice/_instruments.py", line 360, in call_message
return self.wait_reply(_id).result
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tidevice/_instruments.py", line 550, in wait_reply
raise MuxError("connection closed")
tidevice.exceptions.MuxError: connection closed

git 上演示的脚本,udid 和 bundleId 都替换过了 运行就报这个错误 但后续还有正常的输出

_YI 回复

你执行的什么命令呀

codeskyblue 回复

那段用接口输出性能指标的 demo

cmlanche iPhone has denied the launch request. 中提及了此贴 05月24日 10:09

R: network {'timestamp': 1621923971294, 'downFlow': 4915.939453125, 'upFlow': 6.578125}
R: network {'timestamp': 1621923971294, 'downFlow': 644.9013671875, 'upFlow': 6.0810546875}
R: network {'timestamp': 1621923971295, 'downFlow': 4.384765625, 'upFlow': 3.95703125}
time.sleep(1)会输出几组数据 这几组数据时间戳相同的话 不同行的数据有什么区别吗

codeskyblue 回复

大佬,如果用 linux 执行,是不是也必须要安装 iTunes 呢?iTunes 在 linux 兼容性怎么样呢?有版本要求没?

yy 回复

Linux 直接 apt install usbmuxd 这个装上就行

codeskyblue 回复

好的,谢谢

codeskyblue 回复

大佬你好,我正在学习您开源的 ATX-automator,然后发现,UiObject 的 parent 方法还没有实现 是之后不再维护了吗?

yy 回复

大佬,linux 的环境整了,但是报 var/run/usbmuxd unable to connect ,是 usbmuxd 没有安装好么?谢谢,大佬

codeskyblue 回复

大佬,我这边也是在 docker 下部署的,命令这样执行么?tidevice list -v /var/run/usbmuxd:/var/run/usbmuxd 命令敲下去后,说命令参数非法呢?还是命令没有搞对,谢谢大佬

yy 回复

真的是一言难尽,你要不先熟悉一下 docker

codeskyblue 回复

大佬。请帮忙看下,问题在哪里
ios 已经安装 wda。appium 版本的
windows10 系统



这个问题怎么解决

codeskyblue 回复

好的,谢谢大佬。还有一个问题请教一下,wda 隔一段时间就会不可用,就需要重新编译 wda,这个是为什么呢?请问有解决方法么?

yy 回复

花钱买开发者证书可以坚持 1 年

codeskyblue 回复

谢谢大佬,我用的是免费个人证书。我看免费帐号会七天过期,但是我还没有到七天,这是什么原因呢?

提问:webdriver 启用 appium 报错如何解决呀?以下为报错内容:
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not find path to Xcode by symlinks located in /var/db/xcode_select_link, or /usr/share/xcode-select/xcode_dir_link

Leac 回复

已解决

window10 下报这个错误,是什么原因啊?

Leac 回复

请问,这个问题你怎么解决的?

启动后第一次跟 wda 通信很慢,需要一分钟左右,后面每次都很快,是啥原因:
1、启动命令:'tidevice -u {0} xctest'.format(did)
2、wda 初始化:driver = wda.USBClient(self.device_id, port=8100)
3、跟 wda 通信:print(driver.info)

baicaisir 回复

"usePrebuiltWDA": "false",
"useXctestrunFile": "false",
"skipLogCapture": "true"

加这 3 个即可

能指导一下怎么在 Linux 里面怎么实现 iOS 的 stf 吗?

请问一下用什么定位元素呢?我输入http://localhost:8100/,会提示拒绝访问,这是为什么呢

cmlanche 回复
[I 211019 11:24:04 _device:990] BundleID: com.jd.uiclimber.xctrunner
[I 211019 11:24:05 _device:992] DeviceIdentifier: 00008030000E44623E03402E
[I 211019 11:24:05 _device:834] SignIdentity: 'Apple Development: xxxx@qq.com (FRXTU68BU3)'
[I 211019 11:24:05 _device:840] CFBundleExecutable: WebDriverAgentRunner-Runner
[I 211019 11:24:05 _device:871] AppContainer: /private/var/mobile/Containers/Data/Application/046043DA-E3CC-45A3-9CDA-98D1CB7FB1FA
[I 211019 11:24:05 _device:911] Launch 'com.jd.uiclimber.xctrunner' pid: 11363
[I 211019 11:24:05 _device:1086] ProductVersion: 14.4.2
[I 211019 11:24:05 _device:1033] Start execute test plan with IDE version: 29
[I 211019 11:24:07 _device:1116] xctrunner quited

我这边也是一样的现象 wda 没有启动起来

TangSir61 回复

DEBUG=1 tidevice xctest 看看有什么输出不

TD 回复
C:\Users\DDDerek>tidevice -u eedb3ab67816fbfa0884a3fbaa4c3508765f8237 relay 8100 8100
[D 211116 14:33:30 _relay:36] handle stream from: ('::1', 62866, 0, 0)
[E 211116 14:33:30 _relay:46] connect to device error: UsbmuxReplyCode.ConnectionRefused

大佬,使用最新的 tidevice,会报错是因为什么?

大佬,运行后会自动退出的问题解决了吗,具体的解决方法是啥呀

AotingKey 回复

你先下载一个 iTunes 看看能否正常连接手机吧

TD 回复

iTunes 能连接手机,像是程序的问题,因为用每个方法启动 wda 都是只有几行就退出了

膜拜大佬 orz,我们刚好有几个点卡在这上边

14楼 已删除
11楼 已删除
12楼 已删除
41楼 已删除
77楼 已删除
81楼 已删除
85楼 已删除
87楼 已删除
131楼 已删除
TD 回复

我使用 win7 用
itunnel_mux.exe --iport 8100 --lport 8100 好像 itunes 版本不兼容。唉

167楼 已删除
183楼 已删除

问一下,tidevice 有相关的命令可以获取到 ios 的分辨率和内存吗?

tidevice 可以获取/操作模拟器吗

通过命令 tidevice -u 00008110***************** perf -B com.************ 生产出来的数据各项指标产出率不太稳定

看了源码也测试了下发现 tidevice 是通过 usbmux 获取数据自己解析这里确实会出现生产数据有间隔的情况

WebDriverAgent.ipa 好像没有了

195楼 已删除
197楼 已删除
196楼 已删除
178楼 已删除
198楼 已删除

跟 facebook 的 idb 很像啊,idb 好像也可以

Copolymer 回复

是的有点像,不过 idb 有一个中间服务层。通过 oc 能支持苹果虚拟机,功能更多一点。不过之前用的时候感觉稳定性不是很好。另外还有一个工具叫 go-ios 也跟 tidevice 类似

Jacc 回复

Hello,我也遇到了重签后启动报错的问题,你后面有解决吗?

膜拜大佬,但是 tidevice perf 命令下,cpu 参数的含义是什么呀,value 和 sys_value 搞的一头雾水😂

绫小祖 回复

😂 亲,你现在知道参数含义是什么了么,求指教

204楼 已删除

膜拜大佬
另外日期是 2021 年?

有空试一下~~~

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册