使用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
解决办法如下:
-
如果你的appium版本是最新的,直接跳到第3步。
否则卸载appium desktop(finder/application里找到app后直接拖到垃圾桶) -
下载安装最新的appium desktop: Releases · appium/appium-desktop · GitHub
-
finder/application里找到最新安装的appium app, 右击选择show package contents,定位到WebDriverAgent.xcodeproj所在路径:
参考:/Applications/Appium Server GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
-
下载最新的WedDriverAgent: Releases · appium/WebDriverAgent · GitHub
把下载好的WedDriverAgent里的全部内容替换到第三步的路径下(原内容可全部删除)
-
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://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 # 重新安装