使用Appium进行iOS的真机自动化测试

基础环境搭建
基础环境: 一台苹果笔记本、一个iphone手机

Macbook Pro 做 iOS 测试,Mac 是绕不开的,我们依赖的软件环境需要运行在 Mac 上,必须要有一台 Mac 本

基础依赖环境

1、Xcode

Xcode是Mac OS平台上的集成开发工具(IDE),用来开发Mac OS应用和IOS移动端应用,在Appium for IOS环境搭建时需要通过Xcode编译WebDriverAgent运行在设备中。Xcode安装比较简单,直接在Apple Store里面搜索下载安装即可。

2、Homebrew

Homebrew是Mac平台的软件管理软件,它可以使我们更加容易安装一些其他软件,仅需要执行简单的安装命令,就能下载安装所需要的软件,省去了下载、解压、拖拽等繁琐的步骤。

3、Carthage

Carthage用来管理项目依赖, 类似于 Java 中的 Maven;后面编译WebDriverAgent项目时就需要用到它
brew install carthage
carthage version

4、ios-deploy

ios-deploy一个不需要用Xcode安装和调试应用的命令行工具。需要一个有效的开发者证书,需要 Xcode 7以上的版本。终端输入命令进行安装:

brew install ios-deploy # 安装命令
brew reinstall ios-deploy # 重新安装
brew upgrade ios-deploy # 更新命令

常用命令如下:

ios-deploy -c # 查看当前链接的设备
ios-deploy --[xxx.app] # 安装APP
ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId] # 卸载应用
ios-deploy --id [udid] --list_bundle_id # 查看所有应用
ios-deploy --id [udid] --exists --bundle_id # 查看应用是否安装

5、ideviceinstaller

ideviceinstaller是一个与iOS设备的installation_proxy交互的工具,允许安装、升级、卸载、存档、还原和列举已安装或存档的app。此工具用于在真机上运行测试,默认是都安装的。

brew install ideviceinstaller

6、libimobiledevice

libimobiledevice是一个跨平台的软件库 ;不依赖任何已有的私有库,不需要越狱。应用软件可以通过这个开发包轻松访问设备的文件系统、获取设备信息,备份和恢复设备,管理 SpringBoard 图标,管理已安装应用,获取通讯录、日程、备注和书签等信息

安装最新版本libimobiledevice
brew install libimobiledevice --HEAD

ideviceinstaller & libimobiledevice
ios-deploy、ideviceinstaller 类似 android 的 adb; 是 Appium 底层用到的工具之一,用于获取 iOS 设备信息。

libimobiledevice 是一个跨平台的软件库 ; 不依赖任何已有的私有库,不需要越狱。应用软件可以通过这个开发包轻松访问设备的文件系统、获取设备信息,备份和恢复设备,管理 SpringBoard 图标,管理已安装应用,获取通讯录、日程、备注和书签等信息
brew install ideviceinstaller # 用于查看bundleid
brew reinstall ideviceinstaller # 重新安装

ideviceinstaller 是一个与iOS设备的installation_proxy交互的工具,允许安装、升级、卸载、存档、还原和列举已安装或存档的app。此工具用于在真机上运行测试,默认是都安装的。
brew install libimobiledevice --HEAD # 安装最新的更新
brew reinstall libimobiledevice # 重新安装

其常用命令如下:

查看当前所连接的设备
idevice_id -l # 显示当前所连接设备的 udid
instruments -s devices # 列出所有设备,包括真机、模拟器、mac

Appium环境

1、Node&npm

Node是一个javascript运行时环境,npm是节点包管理器。我们需要这些,因为Appium是一个node应用程序。

brew install node

2、Appium

Appium提供了Appium Desktop(桌面版)和Appium Server命令行版本两种安装方式,前者有带了图形化界面,后者是纯命令行方式。两种方式任选其中一种即可。
2.1、Appium Desktop

下载地址:
https://github.com/appium/appium-desktop/releases

需要注意的是,从Appium Desktop V1.22.0版本开始,Appium Desktop内置的检查器(一个可以用来获取页面元素信息的工具)已经被移除掉了,成为了一个单独的程序。

下载安装过程非常简单,这里我们一般选择新版本就好了。

2.2、Appium Server命令行版本
Appium server通过npm可以下载管理
npm install -g appium

默认将会安装最新版本,如果需要指定版本,通过以下命令:
npm install -g appium@1.7.2

检查appium版本
appium -v

启动appium服务

# -a参数:设置appium工作地址
# -p参数,设置appium工作端口号
appium -a 127.0.0.1 -p 4723

3、安装Appium doctor

Appium doctor可以用于检测Appium所需要的依赖环境是否是成功的

检查appium安装是否成功的工具集指令

安装 appium-doctor
npm install appium-doctor -g

#检测iOS环境是否安装成功
appium-doctor --ios

备注: necessary dependcies 必须全部是对勾状态 ,可选部分依赖可以不用全部安装

使用命令 appium-doctor 检查环境时报错:Carthage was NOT found
解决方法:使用命令 brew install carthage 安装 carthage

4、安装Appium inspector

前面有提到过,新版本Appium Desktop(从V1.22.0版本开始)已经将Appium inspector(检查器)工具移除了,所以如果想要使用检查器工具我们需要额外再下载Appium inspector:

https://github.com/appium/appium-inspector/releases

配置运行WebDriverAgent

前面我们说过WebDriverAgent是Appium测试IOS应用的自动化引擎,新版本Appium和IOS最好使用Appium内置的WebDriverAgent,当Appium(Appium桌面版或者命令行版本)安装好之后我们可以使用Xcode来编译运行WebDriverAgent。

对于Appium命令行版本,WebDriverAgent在
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/ 路径下

对于Appium桌面版本,WebDriverAgent在
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent 路径下

我的路径:/Applications/Appium Server GUI.app/Contents/Resources/app/node_modules/appium/node_modules

这里以命令行版本为例
点击WebDriverAgent.xcodeproj使用Xcode打开WebDriverAgent工程:

配置WebDriverAgent

第一次配置需要创建开发者账号

选择 WebDriverAgentLib->Signing & Capabilities,输入 apple id 和密码

之后点击Download Manual Profiles,再点击 Manage Certificates

点击管理证书manage certificates

之后回到Xcode工具的Signing & Capabilities再选择刚才添加好的Team:

还需要配置WebDriverAgentRunner,在 Team 中同样选择即可:

运行WebDriverAgent

选择
Product->Scheme->WebDriverAgentRunner

Destination 中选择要测试的设备,这里我选择的是一台iphone8 15.5的模拟器,当然你可以选择其他的设备进行测试

最后点击 Product->Test,经过编译运行成功之后,会启动模拟器并且在模拟器中安装一个无图标的 WebDriverAgent 应用,启动了 WebDriverAgent 应用之后又会返回到桌面。并且可以在 Xcode 控制台日志中看到有 ServerURLHere 提示

如果运行报错了:
error build: Cannot link directly with dylib/framework, your binary is not an allowed client of /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework/XCTAutomationSupport for architecture arm64

解决办法如下:

  1. 如果你的appium版本是最新的,直接跳到第3步。
    否则卸载appium desktop(finder/application里找到app后直接拖到垃圾桶)

  2. 下载安装最新的appium desktop:​​​​​​​ ​​​​​​​Releases · appium/appium-desktop · GitHub

  3. finder/application里找到最新安装的appium app, 右击选择show package contents,定位到WebDriverAgent.xcodeproj所在路径:

参考:/Applications/Appium Server GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent

  1. 下载最新的WedDriverAgent: ​​​​​​Releases · appium/WebDriverAgent · GitHub
    把下载好的WedDriverAgent里的全部内容替换到第三步的路径下(原内容可全部删除)

  2. xcode里选择最新的WebDriverAgent.xcodeproj, build成功

在浏览器中输入ServerURLHere中间的http://IP地址:端口/status,出现如下提示则表示WebDriverAgent安装配置成功并准备好接收请求了。
http://127.0.0.1:8100/status

准备IOS测试app

很多小伙伴在学习阶段没有ios的app测试包可供使用,这里我们可以用appium官方提供的ios-uicatalog这个demo项目

https://github.com/appium/ios-uicatalog

该demo项目里面包含了一些操作示例,比如滑动、webview元素、输入、点击操作,我们可以用它来练习IOS自动化

1、克隆项目代码到本地

git clone https://github.com/appium/ios-uicatalog.git

2、运行项目

使用xcode打开项目目录下的UICatalog.xcodeproj文件,直接点击运行按钮,之后会在设备中安装UICatalog应用

Appium inspector识别页面元素

借助Appium检查器工具,我们可以识别app页面元素信息辅助编写自动化测试脚本,将之前安装好的appium检查器工具启动(需要注意的是:使用检查器工具之前需要将appium服务启动)

配置说明:

Remote Host:appium服务工作ip地址
Remote Port:appium服务工作端口号
Remote Path:appium访问地址,默认都是为/wd/hub这个节点
Desired Capabilities(所需能力)配置
platformName:测试平台
platformVersion:系统版本
deviceName:设备名
udid:设备唯一标识符
bundleId:测试app的唯一标识,类似于android应用的包名

说明:在填写所需能力配置时,不需要加前缀:appium:,当保存配置之后,检查器工具会自动为我们加上。

如果你都配置好了
点击start session成功了,就完成了,

如果你遇到了这个问题:

Original error: Could not load a driver for platformName 'IOS'. Please verify your Appium installation

看看下面的帖子,
https://discuss.appium.io/t/could-not-find-a-driver-for-automationname-xcuitest-and-platformname-ios-have-you-installed-a-driver-that-supports-those-capabilities-run-appium-driver-list-installed-to-see-lower-level-error-cannot-find-module-capabilities/38180

https://testerhome.com/topics/36004
我是直接从新安装了appium desktop就好了,什么也没有干,

udid参数值如何获取?

选择xcode工具栏上面的Window->Devices and Simulators,选中对应设备即可看到udid

bundleId参数值如何获取?

打开Xcode,对应项目工程中选择General即可看到

参数填写完毕记得保存下,否则下次重新启动appium检查器需要重新填写,点击Start Session启动回话,之后可以通过该工具获取app页面元素信息了。

配置真机

如图所示,会出现报错提示,进入WebDriverAgentRunner -> Build Settings设置中,找到Packaging中的选项,将其内容修改为唯一识别的字符串:

上面的都一样,在进入WebDriverAgent,Product>Destination,选择你的设备

Product>Scheme,选择WebDriverAgent
Product>Test,运行项目

这个时候手机上会成功安装上WebDriverAgent,首次安装需要手机上设置信任,路径为设置>通用>描述文件与设备管理,找到WebDriverAgent并设置信任

1.查看模拟器的udid用的
xcrun instruments -s
xcrun simctl list

2.启动这个模拟器:
xcrun instruments -w 'B39EC2FF-8A8B-4BFF-AFA4-7875904A9EB8'

3.在这个模拟器安装路径下的APP
xcrun simctl install B39EC2FF-8A8B-4BFF-AFA4-7875904A9EB8 /Users/brian/Desktop/TPPortal.app

4.卸载这个模拟器中的APP
xcrun simctl uninstall B39EC2FF-8A8B-4BFF-AFA4-7875904A9EB8 com.cntaiping.portalQingyunTest

5、启动模拟器上的APP
xcrun simctl launch B39EC2FF-8A8B-4BFF-AFA4-7875904A9EB8 com.cntaiping.portalQingyunTest

6.不启动 Xcode 该如何开启 iOS 模拟器?
/Applications/Xcode.app/Contents/Developer/Applications/Simulator

7.ios app 包查看包名(Bundle identifier)
打开plist编辑器,open打开解压后的安装包中的info.plist文件 ,查看plist中的Bundle identifier。

安装应用
ideviceinstaller -u [udid] -i [xxx.ipa] # xxx.ipa 为应用在本地的路径
卸载应用
ideviceinstaller -u [udid] -U [bundleId]
查看设备已安装的应用
ideviceinstaller -u [udid] -l # 查看设备安装的第三方应用
ideviceinstaller -u [udid] -l -o list_user # 同上,查看设备安装的第三方应用
ideviceinstaller -u [udid] -l -o list_system # 查看设备安装的系统应用
ideviceinstaller -u [udid] -l -o list_all # 查看设备安装的所有应用
获取设备信息
ideviceinfo -u [udid] # 获取设备信息
ideviceinfo -u [udid] -k DeviceName # 获取设备名称 同命令
idevicenameidevicename # 同上
ideviceinfo -u [udid] -k ProductVersion # 获取设备版本 10.3.3
ideviceinfo -u [udid] -k ProductType # 获取设备类型 iPhone 8,1
ideviceinfo -u [udid] -k ProductName # 获取设备系统名称
查看手机实时日志
idevicesyslog #屏幕上即可看见手机上所有的日志
idevicesyslog >> iphone.log & #重定向日志到文件中
获取手机端崩溃报告
idevicecrashreport # 参数可设置具体文件存放位置
截屏
idevicescreenshot #获取当前截屏,效率比appium截屏高10倍
其他系统文件信息
ideviceinfo # 获取设备所有信息
idevicesyslog # 获取设备日志
idevicecrashreport -e test # 获取设备
crashlog,test 是文件夹需新建
idevicediagnostics # 管理设备状态 - 重启、关机、睡眠等
重启
idevicediagnostics restart

ios_webkit_debug_proxy
Appium使用ios_webkit_debug_proxy这个工具在真机上访问web view。即混合应用的测试 ;在终端中,运行以下命令:

brew install ios-webkit-debug-proxy # 安装命令
brew reinstall ios-webkit-debug-proxy # 重新安装

posted @ 2021-12-01 05:12  技术改变命运Andy  阅读(330)  评论(0编辑  收藏  举报