Appium + ios环境搭建过程Mac

前提:

已经搭建好Node+Java+Python+Appium...环境

见下面的文章:

ok的话按照下面的步骤搭建IOs的自动化

1. 安装Xcode

  • 官方下载 (Downloads and Resources - Xcode - Apple Developer 1)
  • AppStore 下载安装最新版本

2. 依赖工具

工具名描述
libimobiledevice 2跨平台的软件协议库和工具,用来支持 iphone 等苹果设备的协议
ideviceinstaller命令行工具,用于管理 iOS 设备上应用程序的安装、卸载、升级等,也可以查看 app 相关的信息
Carthage是一个 iOS 项目依赖管理工具,可以很方便的管理三方依赖,WDA 使用这个工具管理项目依赖
ios-deploy终端安装和调试 iPhone 应用的第三方开源库
ios-webkit-debug-proxy通过 websocket 连接代理来自 usbmuxd 守护进程的请求,允许开发人员在真实和模拟的 iOS 设备上向 MobileSafari 和 UIWebViews 发送命令,appium 依赖此工具进行 webview 控件的操作

3.  依赖安装

# libimobiledevice 是一个跨平台的软件库,可以管理已安装应用,获取通讯录、日程、备注和书签等信息
brew install --HEAD libimobiledevice
# ideviceinstaller 是一个命令行工具,主要用于管理iOS设备上应用程序的安装与卸载,以及查看相关信息
brew install ideviceinstaller
# WDA 依赖
brew install carthage
# 是一个终端安装和调试iPhone应用的第三方开源库
brew install ios-deploy
# 又名 iwdp,通过websocket连接代理来自usbmuxd守护进程的请求,允许开发人员在真实和模拟的iOS设备上向MobileSafari和UIWebViews发送命令,appium 依赖此工具进行webview控件的操作
brew install ios-webkit-debug-proxy
3.1 检查环境
npm install appium-doctor -g
appium-doctor --ios//检测ios环境是否安装成功

  全是✅说明环境ok了,没有的话缺啥装啥

4. WebDriverAgent配置

1. 进入appium安装路径
cd  /Users/[appleuser]/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent/2. 进入图形化页面
open .2. 进入目录,点击运行WebDriverAgent.xcodeproj
可以命令行先进入WebDriverAgent路径下
手动点击打开

5. 配置Xcode

注意Xcode与Mac的版本以及真机IOS的版本要对应

Xcode选好链接成功 的真机

5.1 登录自己的Team,这里个人直接appid

5.2 应用名称写唯一的

5.3 执行

下面这个页面

Command+R执行没有问题

再Command+U运行出现

并且手机装了WebDriverAgent就说明成功了。

执行出错:

Unable to launch com.yiyitech.powerex12333.xctrunner

点击Detail,显示:

Failure Reason: Unable to launch com.yiyitech.powerex12333.xctrunnerbecause it has an invalid code signature, 
inadequate entitlements or its profile has 
not been explicitly trusted by the user.

解决:

真机设备上,确保你已经信任了开发者证书。在 "设置" 应用中,转到 "通用" > "设备管理",选择你的开发者证书,然后点击 "信任"。

5. Appium Inspector访问

5.1 如果浏览器打开下面的链接访问

Appium Inspector by Appium Pro

需要启动的时候允许跨域,

appium --allow-cors
5.2 如果Appium客户端访问直接请求
appium

同时需要在

Desired Capabilities添加udid

查看udid办法:

要获取 iOS 设备的 UDID(Unique Device Identifier),你可以使用以下方法之一:方法1. 通过 iTunes:连接你的 iOS 设备到电脑,并打开 iTunes。
在 iTunes 中,选择你的设备。
在设备的概要页面中,你将看到设备的序列号。
点击序列号旁边的文本,直到出现 UDID。你可以右键点击 UDID 并选择 "复制"。
通过 Xcode:方法2. 连接你的 iOS 设备到电脑,并打开 Xcode。
在 Xcode 中,选择 "Window" > "Devices and Simulators"。
在 "Devices and Simulators" 窗口中,选择你的 iOS 设备。
你将看到设备的一些信息,包括 UDID。
通过命令行:方法3. 打开终端。
运行以下命令,查看连接到电脑的所有 iOS 设备的 UDID:
bash
Copy code
xcrun instruments -s devices
在输出中,你将看到每个设备的 UDID。

start session出现下面的报错:

Could not proxy command to the remote server. Original error: socket hang up

需要加:

最后的Desired Capabilities

{"platformName": "iOS","appium:platformVersion": "14.4","appium:deviceName": "iPhone","appium:automationName": "XCUITest","appium:bundleId": "com.xxx.xxx","appium:udid": "00008101-xxxx","appium:xcodeSigningId": "iPhone Developer","usePrebuildWDA": true,"newCommandTimeout": "300"
}

出现下面的报错:

Calling AppiumDriver.getPageSource() with args: ["7557ac30-6dc9-4660-8ea3-cf5e537fe741"]
[XCUITestDriver@fd79 (7557ac30)] Executing command 'getPageSource'
[XCUITestDriver@fd79 (7557ac30)] Matched '/source?format=xml&scope=AppiumAUT' to command name 'getPageSource'
[XCUITestDriver@fd79 (7557ac30)] Proxying [GET /source?format=xml&scope=AppiumAUT] to [GET http://127.0.0.1:8100/session/C380BAF2-8151-4092-AADE-F50C0AE58DAA/source?format=xml&scope=AppiumAUT] with no body

原因是超时了,Appium Inspector加载资源特别慢,可能需要10+分钟,设置超时等待时间

  "newCommandTimeout": "300"

5.3 如果想要使用weditor抓包工具

  •         先安装weditor
  • 设置监听端口
    • iproxy 8200 8100

      访问:http://localhost:8200/status

                出现设备信息及说明正常了

6. 声明Driver

            //appium serveDesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability("platformName","iOS");capabilities.setCapability("platformVersion", "14.4");capabilities.setCapability("deviceName", "iPhone");capabilities.setCapability("automationName","XCUITest");capabilities.setCapability("bundleId","com.xxx.xxxx");capabilities.setCapability("udid","00008101-xxxxx");capabilities.setCapability("xcodeSigningId","iPhone Developer");capabilities.setCapability("usePrebuildWDA",true);capabilities.setCapability("includeSafariInWebviews",true);capabilities.setCapability("connectHardwareKeyboard",true);capabilities.setCapability("newCommandTimeout", "300");capabilities.setCapability(MobileCapabilityType.NO_RESET, true);capabilities.setCapability(MobileCapabilityType.PRINT_PAGE_SOURCE_ON_FIND_FAILURE, true);capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300000);capabilities.setCapability(SupportsAutoGrantPermissionsOption.AUTO_GRANT_PERMISSIONS_OPTION, true);try {//1、打开app操作iosDriver = new IOSDriver(new URL("http://0.0.0.0:4723"),capabilities);//隐式等待iosDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));} catch (MalformedURLException e) {throw new RuntimeException(e);}

7. 

常用命令总结

1. 查看设备连接
idevice_id -l2. 真机安装应用
ideviceinstaller --install </path/to/file/xxx.app>
ideviceinstaller -i </path/to/file/xxx.app>3. 真机卸载应用
ideviceinstaller --uninstall <appid>
ideviceinstaller -U <appid>4. 真机查看应用的 bundleid 
ideviceinstaller -l

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/337855.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot 房屋租赁系统

spring boot mysql mybatis 前台后端

怎么用ATECLOUD-POWER开关电源测试系统测量交直流电源功率?

直流电源功率和交流电源功率 电源功率是用来描述电源输出能力的指标&#xff0c;电源功率的大小直接关系到电子设备的性能和功能。电源功率越大&#xff0c;提供的电能就越多&#xff0c;从而也可以适用于大功率电子设备的运行。 电源功率包括直流电源功率和交流电源功率。 1. …

Confluence跨大版本升级记录

初始版本7.4.18最终升级到了目前的最新版本8.7.1&#xff0c;在升级过程中遇到了很多问题&#xff0c;庆幸的是最后都解决了&#xff0c;记录一下。 背景 初始环境&#xff1a; OS&#xff1a;CentOS8.5 DB&#xff1a;10.8.8-MariaDB Confluence&#xff1a;7.4.18 公司…

分享两个概念:非受检异常和受检异常

分享两个概念&#xff1a;非受检异常和受检异常 愿你的每一天都充满阳光和笑声&#xff0c;愿每一步都是轻松与愉快。在新的旅程中&#xff0c;愿你找到勇气攀登高峰&#xff0c;找到智慧化解困境。 愿你的心中充满温暖和善意&#xff0c;愿你的梦想如彩虹般美丽且真实。愿你发…

外汇天眼:CQG 与 TradeStation Securities 的经纪服务集成

TradeStation Securities, Inc.&#xff0c;一家自营的在线股票、ETF、期权和期货交易经纪公司&#xff0c;宣布与CQG合作&#xff0c;CQG是一家为交易员、经纪商、商业套保者和交易所提供高性能技术解决方案的全球供应商&#xff0c;已与TradeStation Securities的经纪服务集成…

零基础学习数学建模——(二)数学建模的步骤

本篇博客将详细介绍数学建模的步骤。 文章目录 引例&#xff1a;年夜饭的准备第一步&#xff1a;模型准备第二步&#xff1a;模型假设第三步&#xff1a;模型建立第四步&#xff1a;模型求解第五步&#xff1a;结果分析第六步&#xff1a;模型检验第七步&#xff1a;模型应用及…

JVM基础(1)——JVM类加载机制

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

星耀新春,集星探宝,卡奥斯开源社区双节活动上线啦!

卡奥斯开源社区龙年新春专题活动上线啦&#xff01; “星耀新春&#xff0c;集星探宝”&#xff0c;卡奥斯开源社区龙年新春专题活动重磅发布&#xff01; 写文章、发项目、建应用、做测评&#xff0c;玩转盘、开宝箱 6大活动板块陪你玩儿转双节&#xff01; 扫地机器人、家…

计算机导论03-计算机组成

计算机系统结构 冯•诺依曼体系结构 冯•诺依曼体系结构的基本要点 冯•诺依曼思想即冯•诺依曼体系结构思想&#xff0c;其最基本的概念是存储程序概念&#xff0c;它奠定了现代计算机的结构基础。 功能部件: 计算机必须具备五大基本组成部件&#xff0c;包括&#xff1a;运…

使用git submodule解决高耦合度问题

引言 在开发我的笔记系统时&#xff0c;我遇到了一个问题。问题是&#xff0c;在api-gate服务中&#xff0c;我需要验证用户的access_code&#xff0c;但是access_code的生成逻辑是在auth2服务中实现的。这个问题从架构设计的层面上看&#xff0c;就是一个高耦合度问题。高耦合…

C++重新认知:namesapce

0、引言 为什么要用到命名空间 想必我们在写C语言时经常在main.cpp文件内写下using namespace std 这句代码&#xff0c;这句代码有何作用呢&#xff1f; 其实写上这句代码后&#xff0c;我们就会使用std的命名空间。 好处&#xff1a;可以帮我们节省很多不必要的代码&#…

jmeter性能测试常用并发线程组

每秒完成事务数&#xff1a;作用是统计各个事务每秒钟成功的事务个数添加方式&#xff1a;测试计划 --> 线程组--> 监听器-->Transactions per Second 每秒字节吞吐量&#xff1a;作用是查看服务器吞吐流量&#xff08;单位/字节&#xff09;添加方式&#xff1a;测试…