iOS客户端自动化UI自动化airtest+appium从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图
Android客户端自动化UI自动化airtest从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图-CSDN博客
避坑系列-必读:
不要安装iOS-Tagent ,安装appium -这2个性质其实是差不多的都是为了安装wda。注意安装appium最新版本,安装完,git下载最新版本的wda(v8.1.0版本-source压缩包解压,代码替换原git下载的wda文件夹下的全部文件 否则各种源码语法报错)
一、基础环境
1. 安装jdk 选择jdk8 如果下载高版本 可能不匹配会失败
下载.dmg文件
苹果电脑 | macOS | jdk1.8 | 环境变量配置_jdk1.8 mac-CSDN博客
Java Downloads | Oracle

jdk环境变量配置
找到java home
qa@mac ~ % cd /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
qa@mac ~ % vim .bash_profile
配置内容如下:
#JAVA
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
qa@mac ~ % source ~/.bash_profile 刷新配置文件
qa@mac ~ % java -version

如果安装了多个jdk 则删除
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-22.jdk/Contents/Home

$JAVA_HOME 显示
/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home

2. 下载airiest
Airtest Project
3. 下载appium
https://github.com/appium/appium-desktop/releases
下载 Appium-Server-GUI-mac-1.22.3-4.dmg
4. MAC修改终端左侧显示的用户名
sudo scutil --set HostName Tmp
Tmp 就是你要修改的名字, 比如, 你要改成abc, 那么 执行下面的命令
sudo scutil --set HostName mac
重启终端生效
5. 下载xcode
打开App Store搜索xcode

6. 安装homebrew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
下载源选择阿里巴巴
MAC安装brew保姆级教程_mac brew-CSDN博客

7. 安装python3.6.8,版本太高会导致airtest安装失败,下载地址:https://www.python.org/downloads/release/python-368/
我安装的Python Releases for macOS | Python.org 3.9.0版本
添加环境变量,执行open ~/.bash_profile,加入
alias python="/python安装路径/python3.6"
alias pip="/python安装路径/pip3.6"
保存后执行source ~/.bash_profile && python -V && pip -V检测安装版本是否成功
如遇:排除错误 pip Command Not Found
1. 检查是否安装了pip
在Mac和Linux上,您可以使用以下命令检查是否安装了pip
python3 -m pip --version
如果pip安装正确,输出如下
pip 24.0 from /Users/qa/Library/Python/3.9/lib/python/site-packages/pip (python 3.9)
如果未安装pip,您可以按照此处相应操作系统的安装步骤进行操作
2. 将pip升级到最新版本
如果pip仍然不工作,请尝试将pip升级到最新版本:
python3 -m pip install --upgrade pip
8. 安装OpenCV:执行pip3 install opencv-contrib-python
9. 安装poco:执行pip3 install pocoui

10. 下载carthage
brew install carthage
二、iOS端环境配置
参考资料:iOS真机安装WebDriverAgent图文详解-腾讯云开发者社区-腾讯云
1. 安装iOS-Tagent
git仓库下载代码
git clone https://github.com/AirtestProject/iOS-Tagent.git
下载上面的代码后,找到WebDriverAgent.xcodeproj这个文件,各版本位置可能会不一样,如果我提供的路径找不到,可以搜索下文件。/Users/qa/Desktop/2024/code/iOS-Tagent

2. 打开项目后,更改红框中两个文件的相关信息,team可以使用个人苹果id账号,Bundle identifier需要更改一下,不重复就可以了,我是直接在后面加点后缀

3. 如果是个人免费版的证书,还需要修改下WebDriverAgent的BundleID,随便加后缀,不要跟别人重复就好,这里建议可以加当前时间戳,比如:202106290903,如果是付费版开发者证书则不需要这步操作。

4. 模拟器-更改完成后,手机用数据连接电脑
点击xcode顶部工具栏的product——Destination,点击自己的手机设备
如遇提升下载iOS17.4 则下载 更新成功后(8个G左右),正常

5. IntegrateApp选择机型 点击Product-Run 出现如图模拟器界面

6. 真机-用数据线连接iPhone至Mac
选择项目,在菜单栏 product -> Scheme -> WebDriverAgentRunner
选择设备,在菜单栏 product -> Destination -> 选择你的真机
启动Test,在菜单栏 product -> Test

7. 各种报错分析:如遇buildFailed 第54行报错
报错信息如下:Parameter of overriding method should be annotated with __attribute__((noescape))
解决办法:在参数前加 __attribute__((noescape))
修改前- (void)measureBlock:(CDUnknownBlockType)arg1;
修改后- (void)measureBlock:(CDUnknownBlockType)__attribute__((noescape))arg1;
参考https://www.jianshu.com/p/c536c3b81ac2

8. 再次执行product -> Test 弹框报错
Previous preparation error: Developer Mode disabled. To use 越狱兔的iPhone12 for development, enable Developer Mode in Settings → Privacy & Security.

解决办法:IOS开发之——Developer Mode DIsabled-CSDN博客
原因:iPhone设备开发者模式已关闭
打开iPhone的设置,搜索隐私与安全性-安全性-开发者模式 默认为关闭 打开

将开发者模式打开后,设备重启
重启设备后,输入密码开启,查看开发者模式是否打开
如遇The request to open "com.facebook.WebDriverAgentRunner20240401yutu.xctrunner" failed.
去iPhone -VPN与设备管理-信任证书

Xcode中设备恢复正常状态,再次执行product -> Test 弹框报错

iPhone端出现白色文字Automation Running Hold both volume buttons to stop

xcode控制台出现日志:
Test Case '-[UITestingUITests testRunner]' started.
t = 0.00s Start Test at 2024-03-27 15:04:36.614
t = 0.00s Set Up
ServerURLHere->http://169.254.168.151:8100<-ServerURLHere

每次build iPhone端会自动安装WebDriverAgent
9. 各种报错分析-Thread 1: "-[__NSXPCInterfaceProxy_XCTMessagingChannel_RunnerToDaemon _XCT_exchangeProtocolVersion:reply:]: unrecognized selector sent to instance 0x28146df90"
无解 看起来是源码的问题。。。。。。
参考资料(一)app自动化测试环境搭建(mac+ios+airtest )_automation running-CSDN博客
换一种方式安装appium
10. 安装appium 安装最新版本
Releases · appium/appium-desktop · GitHub

安装打开appium

11. 打开appium-webdriveragent 我的路径如图
/Applications/Appium Server GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
双击打开WebDriverAgent.xcodeproj

在xcode配置 更改红框中两个文件的相关信息,team可以使用个人苹果id账号,Bundle identifier需要更改一下,不重复就可以了,我是直接在后面加点后缀2024yutu


12. 连接iPhone手机重复步骤678
开启UI Automation,位置在:iPhone手机-设置-开发者-启用UI自动化

13. 安装appium:npm install -g appium
如果有问题那也需要安装 appium docker
安装完毕运行appium
默认端口为4723
在浏览器/airtest输入网页:http://127.0.0.1:4723/status

14. 如遇xcode build失败
解决办法-20240327亲测有效
[IOS自动化]Xcode build时报错: Cannot link directly with dylib/framework_cannot link directly with dylib/framework, your bi-CSDN博客
解决办法如下:
a. 如果你的appium版本是最新的,直接跳到第3步
否则卸载appium desktop(finder/application里找到app后直接拖到垃圾桶)
b. 下载安装最新的appium desktop: Releases · appium/appium-desktop · GitHub
c. finder/application里找到最新安装的appium app, 右击选择show package contents,定位到WebDriverAgent.xcodeproj所在路径:
参考:/Applications/Appium Server GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
d. 下载最新的WedDriverAgent: Releases · appium/WebDriverAgent · GitHub
下载Source.code即可
把下载好的WedDriverAgent里的全部内容替换到第三步的路径下(原内容可全部删除)

替换

e. 文件夹双击WebDriverAgent.xcodeproj, xcode自动打开。build成功

iPhone安装完WebDriverAgentRunner-Runner后 在VPN与设备管理信任开发者APP 每次test(build)iPhone都会重新安装wda
15. 通过 Homebrew 安装iproxy
brew install libimobiledevice
16. 运行iproxy
iproxy 8100 8100
启动成功后,可以试着在浏览器访问 http://127.0.0.1:8100/status ,如果访问成功并且可以看到一些json格式的手机信息,即表示启动成功 如果返回为空,可能是因为未安装appium导致的(暂不确定)

启动AirTestIDE,devices-iOS APP Connection处填写 http://127.0.0.1:8100 或者启动appium后填写http://127.0.0.1:4723/status 均可。点击connect
连接成功后AirTest Assistant处点击录制即可针对操作进行脚本录制

17. 如果更换iPhone设备或者断开连接 重新连接手机后需要先启动xcode
18. 如遇报错 xcode Exiting due to IDE disconnection. 重启iPhone 重启xcode再次test iPhone输入密码即可 Product-Test成功后,iPhone显示界面如下

19. 安装appium-inspector。 git官网下载最新包
打开Appium Server GUI 点击搜索按钮 跳转到Appium inspector的git官网GitHub - appium/appium-inspector: A GUI inspector for mobile apps and more, powered by a (separately installed) Appium server

下载appium-inspector安装包
Releases · appium/appium-inspector · GitHub
参考资料
APP自动化之airtest(一)---环境搭建mac版&安卓真机连接_mac可以跑android手机机进行airtest测试吗-CSDN博客
APP自动化之airtest(二)---ios真机调试_ios-tagent真机调试-CSDN博客
https://blog.51cto.com/u_16213625/8154325
相关文章:
iOS客户端自动化UI自动化airtest+appium从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图
Android客户端自动化UI自动化airtest从0到1搭建macos脚本设计demo演示全网最全最详细保姆级有步骤有图-CSDN博客 避坑系列-必读: 不要安装iOS-Tagent ,安装appium -这2个性质其实是差不多的都是为了安装wda。注意安装appium最新版本,安装完…...
每周编辑精选|在线运行 Deepmoney 金融大模型、AI 偏好等多个优质数据集上线
目前,AI 领域对金融模型的研究成果大多是基于公共知识进行训练的,但在实际的金融实践中,这些公共知识对于当前市场的可解释性往往严重不足。一个理想的金融大模型应该能够理解新闻或数据事件,并能够即时地从主观和量化两个角度对事…...
C++多重继承与虚继承
多重继承的原理 多重继承(multiple inheritance)是指从多个直接基类中产生派生类的能力。 多重继承的派生类继承了所有父类的属性。 在面向对象的编程中,多重继承意味着一个类可以从多个父类继承属性和方法。 就像你有一杯混合果汁,它是由多种水果榨取…...
请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?
请简单介绍一下Shiro框架是什么? Shiro框架是一个强大且灵活的开源安全框架,为Java应用程序提供了全面的安全解决方案。它主要用于身份验证、授权、加密和会话管理等功能,可以轻松地集成到任何Java Web应用程序中,并提供了易于理解…...
TouchGFX之Button
TouchGFX中的按钮是一种感应触控事件的控件,能够在按钮被按下/释放时发送回调 代码 #ifndef TOUCHGFX_ABSTRACTBUTTON_HPP #define TOUCHGFX_ABSTRACTBUTTON_HPP #include <touchgfx/Callback.hpp> #include <touchgfx/events/ClickEvent.hpp> #includ…...
计算机组成原理 — 指令系统
指令系统 指令系统指令的概述指令的格式指令的字长取决于 操作数类型和操作种类操作数的类型数据在存储器中的存放方式操作类型 寻址方式指令寻址数据寻址立即寻址直接寻址隐含寻址间接寻址寄存器寻址寄存器间接寻址基址寻址变址寻址堆栈寻址 RISC 和 CISC 技术RISC 即精简指令…...
使用easyYapi生成文档
easyYapi生成文档 背景1.安装配置1.1 介绍1.2 安装1.3 配置1.3.1 Export Postman1.3.2 Export Yapi1.3.3 Export Markdown1.3.4 Export Api1.3.6 常见问题补充 2. java注释规范2.1 接口注释规范2.2 出入参注释规范 3. 特定化支持3.1 必填校验3.2 忽略导出3.3 返回不一致3.4 设置…...
蓝桥杯练习题总结(三)线性dp题(摆花、数字三角形加强版)
目录 一、摆花 思路一: 确定状态: 初始化: 思路二: 确定状态: 初始化: 循环遍历: 状态转移方程: 二、数字三角形加强版 一、摆花 题目描述 小明的花店新开张,为了吸…...
Elasticsearch(15) multi_match的使用
elasticsearch version: 7.10.1 multi_match是Elasticsearch中的一种查询类型,允许在一个或多个字段上执行全文本搜索,并合并各个字段的结果得分。这种查询有助于实现跨多个字段的统一搜索体验。 语法 {"query": {"multi_m…...
nodejs的线程模型和libuv库的基本使用
文章目录 nodejs中集成addon本地代码的回调问题单线程事件驱动模型libuvlibuv基本框架addon中使用libuv代码nodejs中集成addon本地代码的回调问题 在C++的代码中,回调函数是一个基本的代码调用方式。而在我自己的开发实践中,需要在addon这样一个nodejs的本地化模块中实现一个…...
Uni-app/Vue/Js本地模糊查询,匹配所有字段includes和some方法结合使用e
天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.第一步 需要一个数组数据 {"week": "全部","hOutName": null,"weekendPrice": null,"channel": "门市价","hOutId": 98,"cTime": "…...
深度学习pytorch——激活函数损失函数(持续更新)
论生物神经元与神经网络中的神经元联系——为什么使用激活函数? 我们将生物体中的神经元与神经网络中的神经元共同分析。从下图可以看出神经网络中的神经元与生物体中的神经元有很多相似之处,由于只有刺激达到一定的程度人体才可以感受到刺激,…...
《苹果 iOS 应用开发与分发的关键问题解析》
一、背景 解决同事问的问题,来来回回被问好几次相同的问题,然后确认,我觉得不如写个文档 二、非研发人员安装iOS应用方式 TestFlightIPA 文件 对比 TestFlightIPA 文件安装方式TestFlight 是苹果提供的一个 beta 测试平台,开发者…...
爱上数据结构:顺序表和链表
一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条…...
python知识点总结(十)
python知识点总结十 1、装饰器的理解、并实现一个计时器记录执行性能,并且将执行结果写入日志文件中2、队列和栈的区别,并且用python实现3、设计实现遍历目录与子目录4、CPU处理进程最慢的情况通常发生在以下几种情况下:5、CPU处理线程最慢的…...
【Python】探索 Python 编程世界:常量、变量及数据类型解析
欢迎来CILMY23的博客 本篇主题为 探索 Python 编程世界:常量、变量及数据类型解析 个人主页:CILMY23-CSDN博客 Python系列专栏:http://t.csdnimg.cn/HqYo8 上一篇博客: http://t.csdnimg.cn/SEdbp C语言专栏: htt…...
vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区
实现左右或者上下div两部分拖动,宽度或者高度自动变化,实现流畅平滑的变化,还可以是实现拖动到一定宽度就不让拖动了,如果你不需要最小宽度,就直接去掉样式就行 这是页面。分左中右三部分,中间我是用来作为拖动的按钮…...
知攻善防应急靶场-Linux(1)
前言: 堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油 注意: 本文章参考qax的网络安全应急响应和知攻善防实验室靶场,记录自己的学习过程&am…...
ffmpeg命令行
ffmpeg 如果要在linux gdb 调试,需要在configure 时候不优化 开启调试 ./configure --enable-debug --disable-optimizations make如何开启gdb 调试 gdb ffmpeg_gset args -i test.hevc -c:v copy -c:a copy output_265.mp4rh264 的流生成mp4 文件,不转…...
VMware虚拟机更换引导顺序
前言 我用wmware装了黑群晖测试,将img转成vmdisk的格式之后发现系统引导盘之后1G,有点太小了 我准备把wmware的黑群晖系统迁移到新添加的虚拟磁盘里 1.登录黑群晖的SSH 请先在黑群晖的控制面板中的终端机和SNMP里面启用SSH功能,才能使用ss…...
OpenClaw灾难恢复:Qwen3-32B-Chat配置备份与快速重建
OpenClaw灾难恢复:Qwen3-32B-Chat配置备份与快速重建 1. 为什么需要自动化备份策略 上周五凌晨三点,我的开发机突然宕机。硬盘故障导致OpenClaw所有配置和Qwen3-32B-Chat模型接入设置全部丢失——这个教训让我意识到:个人开发环境同样需要企…...
告别黑屏!手把手教你为NT35510屏幕适配TouchGFX显示驱动(基于STM32CubeIDE)
深度解析NT35510屏幕与TouchGFX的驱动适配实战 在嵌入式GUI开发领域,TouchGFX凭借其流畅的动画效果和高效的渲染引擎,已成为STM32平台上的首选框架之一。然而,当开发者尝试在非官方支持的屏幕上使用TouchGFX时,底层显示驱动的适配…...
ComfyUI-KJNodes:重构AI创作工作流的效率革命
ComfyUI-KJNodes:重构AI创作工作流的效率革命 【免费下载链接】ComfyUI-KJNodes Various custom nodes for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-KJNodes 一、挑战引入:当AI创作遇上效率瓶颈 在AI图像创作领域…...
别再让蜂鸣器只会‘哔哔’叫了!用STM32F103的PWM和电容,DIY你的家电提示音库(附超级玛丽彩蛋)
用STM32F103打造专业级家电提示音库:从单调蜂鸣到沉浸式音效的进阶指南 1. 为什么传统蜂鸣器音效总让人皱眉? 每次听到微波炉完成加热时刺耳的"嘀——"声,或是洗衣机结束运转时机械的"哔哔"提示,总让人有种想…...
Phi-3-vision-128k-instruct创意编程:用JavaScript构建交互式图像故事生成器
Phi-3-vision-128k-instruct创意编程:用JavaScript构建交互式图像故事生成器 1. 引言:当AI创意遇上前端交互 想象这样一个场景:用户上传一张随手拍的照片,通过简单的滑块调整和风格选择,几秒钟后就能获得一个与图片内…...
WIFI UDP广播数据实时发送的可靠性困境与底层协议探析
1. WIFI UDP广播为何总在关键时刻掉链子? 上周调试智能家居设备时,我遇到了一个典型场景:AP需要向20多个终端同时发送控制指令。最初直接使用UDP广播,结果总有设备"装聋作哑"。换成单播后问题消失,但CPU占用…...
STM32F103C8T6连接HC-06蓝牙模块的完整避坑指南:从AT指令调试到数据收发异常处理
STM32F103C8T6与HC-06蓝牙模块实战避坑手册:从AT指令异常到数据收发的深度解决方案 当你第一次尝试用STM32F103C8T6驱动HC-06蓝牙模块时,是否遇到过这样的场景:AT指令发送后如同石沉大海,串口调试助手始终一片空白;或是…...
NVIDIA Profile Inspector显卡性能调优实战指南:从问题诊断到专业配置
NVIDIA Profile Inspector显卡性能调优实战指南:从问题诊断到专业配置 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 一、显卡性能异常定位:精准找到游戏卡顿根源 游戏性能问题…...
Python中数据映射与转换的实现方法
在Python编程中,数据映射与转换是数据处理过程中的核心环节,广泛应用于数据清洗、格式转换、特征工程等多个领域。本文将系统梳理Python中实现数据映射与转换的多种方法,涵盖基础技巧、进阶应用及第三方库的高效实现,帮助开发者构…...
3大核心方案破解戴森电池固件限制:让你的吸尘器重获新生
3大核心方案破解戴森电池固件限制:让你的吸尘器重获新生 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 问题溯源:…...
