当前位置: 首页 > news >正文

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博客 避坑系列-必读&#xff1a; 不要安装iOS-Tagent &#xff0c;安装appium -这2个性质其实是差不多的都是为了安装wda。注意安装appium最新版本&#xff0c;安装完…...

每周编辑精选|在线运行 Deepmoney 金融大模型、AI 偏好等多个优质数据集上线

目前&#xff0c;AI 领域对金融模型的研究成果大多是基于公共知识进行训练的&#xff0c;但在实际的金融实践中&#xff0c;这些公共知识对于当前市场的可解释性往往严重不足。一个理想的金融大模型应该能够理解新闻或数据事件&#xff0c;并能够即时地从主观和量化两个角度对事…...

C++多重继承与虚继承

多重继承的原理 多重继承(multiple inheritance)是指从多个直接基类中产生派生类的能力。 多重继承的派生类继承了所有父类的属性。 在面向对象的编程中&#xff0c;多重继承意味着一个类可以从多个父类继承属性和方法。 就像你有一杯混合果汁&#xff0c;它是由多种水果榨取…...

请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?

请简单介绍一下Shiro框架是什么&#xff1f; Shiro框架是一个强大且灵活的开源安全框架&#xff0c;为Java应用程序提供了全面的安全解决方案。它主要用于身份验证、授权、加密和会话管理等功能&#xff0c;可以轻松地集成到任何Java Web应用程序中&#xff0c;并提供了易于理解…...

TouchGFX之Button

TouchGFX中的按钮是一种感应触控事件的控件&#xff0c;能够在按钮被按下/释放时发送回调 代码 #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题(摆花、数字三角形加强版)

目录 一、摆花 思路一&#xff1a; 确定状态&#xff1a; 初始化&#xff1a; 思路二&#xff1a; 确定状态&#xff1a; 初始化&#xff1a; 循环遍历&#xff1a; 状态转移方程&#xff1a; 二、数字三角形加强版 一、摆花 题目描述 小明的花店新开张&#xff0c;为了吸…...

Elasticsearch(15) multi_match的使用

elasticsearch version&#xff1a; 7.10.1 multi_match是Elasticsearch中的一种查询类型&#xff0c;允许在一个或多个字段上执行全文本搜索&#xff0c;并合并各个字段的结果得分。这种查询有助于实现跨多个字段的统一搜索体验。 语法 {"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——激活函数损失函数(持续更新)

论生物神经元与神经网络中的神经元联系——为什么使用激活函数&#xff1f; 我们将生物体中的神经元与神经网络中的神经元共同分析。从下图可以看出神经网络中的神经元与生物体中的神经元有很多相似之处&#xff0c;由于只有刺激达到一定的程度人体才可以感受到刺激&#xff0c…...

《苹果 iOS 应用开发与分发的关键问题解析》

一、背景 解决同事问的问题&#xff0c;来来回回被问好几次相同的问题&#xff0c;然后确认&#xff0c;我觉得不如写个文档 二、非研发人员安装iOS应用方式 TestFlightIPA 文件 对比 TestFlightIPA 文件安装方式TestFlight 是苹果提供的一个 beta 测试平台&#xff0c;开发者…...

爱上数据结构:顺序表和链表

一、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条…...

python知识点总结(十)

python知识点总结十 1、装饰器的理解、并实现一个计时器记录执行性能&#xff0c;并且将执行结果写入日志文件中2、队列和栈的区别&#xff0c;并且用python实现3、设计实现遍历目录与子目录4、CPU处理进程最慢的情况通常发生在以下几种情况下&#xff1a;5、CPU处理线程最慢的…...

【Python】探索 Python 编程世界:常量、变量及数据类型解析

欢迎来CILMY23的博客 本篇主题为 探索 Python 编程世界&#xff1a;常量、变量及数据类型解析 个人主页&#xff1a;CILMY23-CSDN博客 Python系列专栏&#xff1a;http://t.csdnimg.cn/HqYo8 上一篇博客&#xff1a; http://t.csdnimg.cn/SEdbp C语言专栏&#xff1a; htt…...

vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区

实现左右或者上下div两部分拖动&#xff0c;宽度或者高度自动变化,实现流畅平滑的变化&#xff0c;还可以是实现拖动到一定宽度就不让拖动了&#xff0c;如果你不需要最小宽度&#xff0c;就直接去掉样式就行 这是页面。分左中右三部分&#xff0c;中间我是用来作为拖动的按钮…...

知攻善防应急靶场-Linux(1)

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全应急响应和知攻善防实验室靶场&#xff0c;记录自己的学习过程&am…...

ffmpeg命令行

ffmpeg 如果要在linux gdb 调试&#xff0c;需要在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 文件&#xff0c;不转…...

VMware虚拟机更换引导顺序

前言 我用wmware装了黑群晖测试&#xff0c;将img转成vmdisk的格式之后发现系统引导盘之后1G&#xff0c;有点太小了 我准备把wmware的黑群晖系统迁移到新添加的虚拟磁盘里 1.登录黑群晖的SSH 请先在黑群晖的控制面板中的终端机和SNMP里面启用SSH功能&#xff0c;才能使用ss…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值&#xff0c;以达到平滑&#xff08;去噪&#xff09;、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算&#xff0c;…...