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

codeskyblue · 2021年01月27日 · 最后由 肖明军 回复于 2024年07月07日 · 57158 次阅读
本帖已被设为精华帖!

简介

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

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

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

有空试一下~~~

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

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

Jerry li 回复

可以

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

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

前排膜拜大佬

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

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

197楼 已删除
196楼 已删除

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

194楼 已删除

有独立包吗?

好东西!赞一个!

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

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

多谢大佬。

cmlanche 回复

别忘了点 Star

codeskyblue 回复

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

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

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


大佬显示 ios 连接有问题

Morii 回复

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

哲豪 回复

已解决 要安装 iTunes

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

赞,太强了

Morii 回复

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

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

Jacc 回复

提供几个方法哈

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

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

Morii 回复

好的 谢谢,这就去试试

codeskyblue 回复

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

“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 的吧

167楼 已删除
xu 回复

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

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

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"
);
})

codeskyblue 回复

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

TD 回复

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

Morii 回复

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

TD 回复

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

匿名 #157 · 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 调成功了吗

匿名 #146 · 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 啊,坑位给你留着

匿名 #144 · 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 就不会报错了

131楼 已删除
linpengcheng 回复

好的,我试试,谢谢

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

127楼 已删除

是 swiftmonkey 吗,能跑起来吗?

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

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

是的,可以跑呀

123楼 已删除

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

121楼 已删除

好东西,感谢大佬,感谢阿里开源,之前楼主的 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

cmlanche 回复

升级升级 tidevice 就好了

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”

请问 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 的方式,如果来查找元素呢?
大佬十分感谢

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

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

77楼 已删除
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 后,直接退出。是什么原因。

换个低版本的系统的 正常

TD 回复

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

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

TD 回复

已更新,确实。大赞


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

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

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

_YI 回复

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

codeskyblue 回复

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

_YI 回复

bundleId 没写错吧

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

codeskyblue · #57 · 2021年05月17日 Author
仅楼主可见

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

codeskyblue 回复

😂 写错了,没替换

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 系统



这个问题怎么解决

41楼 已删除
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 个即可

30楼 已删除

能指导一下怎么在 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 没有启动起来

25楼 已删除
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,会报错是因为什么?

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

TangSir61 回复

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

AotingKey 回复

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

TD 回复

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

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

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

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

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

WebDriverAgent.ipa 好像没有了

195楼 已删除
12楼 已删除
11楼 已删除
10楼 已删除

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

Copolymer 回复

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

Jacc 回复

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

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

绫小祖 回复

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

4楼 已删除

不是,哪有这个目录呀 tests/testdata

meedy2016 Windows 下成功 Appium+python+iOS 自动化 中提及了此贴 10月09日 09:48
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册