环境搭建-IOS
本章节主要讲解在Mac环境下,搭建Appium所需要的软件等。
针对IOS为Mac环境。
第1章 Xcode
Xcode是运行在操作系统Mac上的集成开发工具(IDE),由苹果公司开发。
Xcode是开发OS X和IOS应用程序的最快捷的方式。
Xcode具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。
Xcode如何下载安装或更新呢?打开Mac机上的App Store,搜索Xcode,进行安装或者更新,注意观察下Xcode的更新日志,可以看到当前版本支持的IOS SDK版本。
本书Xcode版本号为9.2
下载Xcode历史版本:
1、打开官网https://developer.apple.com/download/more输入Apple账号与密码进行登录。
2、在搜索框输入Xcode,回车进行搜索,找到各种版本Xcode。
3、点击前面的 ,展开详细页面,点击文件下载就可以了。
第2章 JDK
JDK(Java Development Kit)是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的Java应用程序。JDK是整个Java开发的核心,它包含了Java的运行环境,Java工具和Java基础的类库。
2.1安装
在Mac环境下安装JDK,执行jdk-8u144-macosx-x64.dmg默认安装即可。
2.2配置环境变量
1、打开终端,进入用户的根目录。
2、在终端输入命令 ls –a ,查询 .bash_profile文件是否存在。如果不存在,创建文件:touch .bash_profile
3、编辑文件 vi ~/.bash_profile,输入内容如下:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
export PATH=PATH:JAVA_HOME/bin
4、编辑后保存文件,之后输入source ~/.bash_profile,使环境变量生效。
5、在终端输入java -version,提示以下信息表示JDK环境变量配置成功。
第3章 Homebrew
Homebrew是Mac上缺失的软件包管理器,通过它可以在终端输入命令安装各种软件包。
安装Homebrew:
1、打开官网:https://brew.sh/
2、打开终端,输入命令进行安装/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装完Homebrew,就可以使用brew命令了:
安装软件:brew install 软件名
卸载软件:brew uninstall 软件名
列出已安装的软件:brew list
第4章 libimobiledevice
libimobiledevice是一个跨平台的软件库,它通过协议来支持iphone、iPod Touch、ipad和Apple TV设备。与其他项目不同,它不依赖于使用任何现有的专有库,也不需要越狱。它允许其他软件轻松地访问设备的文件系统,检索有关设备及其内部的信息,备份/恢复设备,管理已安装的应用程序、检索地址簿/日历/笔记和书签,以及(使用libgpod)将音乐和视频同步到设备上。该库自2007年8月开始开发,其目标是将对这些设备的支持带到Linux桌面上。
官方网址:http://www.libimobiledevice.org/ 官方下载地址:https://github.com/libimobiledevice/libimobiledevice
安装libimobiledevice:
打开终端,输入命令 brew install --HEAD libimobiledevice
第5章 ideviceinstaller
ideviceinstaller用于给IOS设备安装卸载应用或者备份应用。它利用libimobiledevice库,允许通信使用IOS设备。
官方下载地址:https://github.com/libimobiledevice/ideviceinstaller
安装ideviceinstaller:
打开终端,输入命令 brew install --HEAD ideviceinstaller
注意:使用命令时,如果提示:Could not connect to lockdownd. Exiting.
解决方法,打开终端,输入命令:
sudo chmod -R 777 /var/db/lockdown/
或者
brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller
第6章 ios-webkit-debug-proxy
在Mac上我们一般调试IOS设备的webView都只能使用Safari的Web检查器。但是Safari的Web检查器用起来不如Chrome的DevTools方便。
使用Chrome DevTools调试IOS设备的webView就需要先安装ios-webkit-debug-proxy。
IOS WebKit Debug Proxy的原理是在本地起了一个代理做Web Inspector到WebKit远程调试的协议转发。ios-webkit-debug-proxy允许开发者通过Chrome DevTools UI和Chrome Remote Debugging Protocol来检查模拟器和真机上MobileSafari和UIWebview。
官方下载地址:https://github.com/google/ios-webkit-debug-proxy
安装ios-webkit-debug-proxy:
打开终端,输入命令 brew install ios-webkit-debug-proxy
安装之后运行如下命令查看是否能够调起(真机)ios-webkit-debug-proxy
打开终端,输入命令ios_webkit_debug_proxy -c UDID:27753 -d
例如:
ios_webkit_debug_proxy -c c5dc675bddf7d1ac6d91783d5224d72b427f8d04:27753 -d
注意,如果运行上述命令报错:Could not connect to lockdownd. Exiting.: Permission denied
解决方法:
打开终端,输入命令 sudo chmod -R 777 /var/db/lockdown/
Appium中使用ios-webkit-debug-proxy:
方式一:在测试脚本里DesiredCapabilities中新增如下参数。
(IWDP指的就是ios-webkit-debug-proxy)
capabilities.setCapability("startIWDP", true);
方式二:终端上输入命令直接手动启动ios-webkit-debug-proxy,然后执行自动化脚本。(Appium默认IWDP端口为27753,UDID为设备唯一标识符)
终端上输入命令 ios_webkit_debug_proxy -u UDID:port
例如:
ios_webkit_debug_proxy -u c5dc675bddf7d1ac6d91783d5224d72b427f8d04:27753
第7章 Carthage
Carthage类似于CocoaPods,为用户管理第三方框架和依赖,但不会自动修改项目文件和生成配置。
Carthage是去中心化的依赖管理工具,安装依赖时不需要去中心仓库获取CocoaPods所有依赖的索引,节省时间。对项目无侵入性,Carthage设计上也比较简单,利用的都是Xcode自身的功能,开发者在创建依赖时,相比CocoaPods也简单许多。
Carthage管理的依赖只需编译一次,项目干净编译时,不会再去重新编译依赖,节省时间。
自动将第三方框架编程为Dynamic framework(动态库);与CocoaPods无缝集成,一个项目能同时拥有CocoaPods和Carthage。
官方网址:https://github.com/Carthage/Carthage
打开终端,输入安装命令 brew install carthage
第8章 Node.js
Node.js就是运行在服务端的JavaScript,是一个基于Chrome JavaScript运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行JavaScript的速度非常快,性能非常好。
官方网址:https://nodejs.org/en/
npm是随同Node.js一起安装的包管理工具,能解决Node.js代码部署上的很多问题,常见的使用场景有以下几种:
1、允许用户从npm服务器下载别人编写的第三方包到本地使用。
2、允许用户从npm服务器下载并安装别人编写的命令行程序到本地使用。
3、允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用。
在Mac环境下可以用命令行或者应用程序安装Node.js。
安装方式一:命令行安装(Homebrew已经安装上)
打开终端,输入命令 brew install node
安装方式二:应用程序
例如:本书用到的node-v6.11.3.pkg应用程序默认安装即可。
安装完成后,环境变量自动添加到系统里,直接打开终端输入node -v,提示以下信息表示Node.js安装成功。
由于新版的Node.js已经集成了npm,同样在终端输入 npm -v, 来测试是否安装成功。
第9章 ios-deploy
不使用Xcode,从命令行安装和调试IOS应用程序。
设计用来处理未越狱的设备。
官方网址:https://www.npmjs.com/package/ios-deploy
官方github网址:https://github.com/ios-control/ios-deploy
打开终端,输入安装命令 npm install -g ios-deploy
注意:如果不安装ios-deploy,在用Appium执行真机进行自动化测试时会报错。
[XCUITest] Error: Could not initialize ios-deploy make sure it is installed (npm install -g ios-deploy) and works on your system.
第10章 Appium
本章节讲解的Appium是服务端,包括:Appium Server和Appium Desktop。
Appium Server是在命令行或终端以命令安装,安装完成后直接输入命令来启动Appium服务。
Appium Desktop是一个应用程序,安装完成后直接运行即可,执行后是有图形界面的Appium服务,与Appium Server功能是一致的,但它附带了一个检查器,用来调试定位应用程序很方便。
所以Appium服务端,可以只安装Appium Server或Appium Desktop或者两个都可以安装。
Appium Desktop官方下载地址:https://github.com/appium/appium-desktop/releases/
10.1Appium Server
在Mac环境下,由于Node.js已经安装完成,直接打开终端输入命令进行安装(由于国内网络问题,安装过程中可能需要FANQIANG)。
默认安装(安装最新版本Appium Server)
npm install -g appium
默认安装(安装最新版本Appium Server,使用淘宝NPM镜像,不需要FANQIANG)
npm install -g appium --registry=https://registry.npm.taobao.org
安装指定版本(有时Appium Server当前版本可能是有问题的,需要指定版本来安装)
例如安装1.6.5版本
npm install -g appium@1.6.5
查看Appium Server所有的版本号
npm view appium versions #
注1:在Mac环境下安装可能会有权限的限制,导致无法安装,可以在命令前加sudo
例如:sudo npm install -g appium
注2:有时候Appium无法安装上,即使加sudo也无法安装上,例如:
输入npm install -g appium,无法安装上。
输入sudo npm install -g appium,也无法安装上。
解决方法:
1、卸载Appium和Node.js(pkg/dmg安装方式无需卸载)。
2、打开终端输入sudo chmod -R 777 /usr/local
3、重新安装Appium(例如:输入npm install -g appium)
安装完成后,Mac下默认安装路径,例如:
/usr/local/lib/node_modules/
打开终端,输入appium,提示以下信息表示Appium Server安装成功且Appium服务已经开启。例如:Appium Server 1.6.5
如果命令行安装Appium失败或者不完整,可以拷贝已有命令行安装过的完整包覆盖到此Mac下Appium默认安装路径位置也是可以的。
例如:命令行安装后的Appium-v1.6.5包.zip进行解压,将解压后的appium文件拷贝覆盖到/usr/local/lib/node_modules/目录下的appium文件。
10.2Appium Desktop
在Mac环境下安装Appium Desktop,例如:执行appium-desktop-1.2.1.dmg默认安装即可。
安装完成后,Mac下默认安装路径,例如:
/Applications
在应用程序里,直接执行Appium.app来启动Appium Desktop。
点击Start Server v1.6.5来开启Appium服务,如下图服务开启成功。
注意:
在使用Appium Desktop进行自动化测试的时候,如报错:
[XCUITest] Error: Could not determine Xcode version: Could not get Xcode version. /Library/Developer/Info.plist does not exist on disk.
说明是先安装Appium Desktop后再安装的Xcode,导致获取不到Xcode版本。
解决方法:卸载Appium Desktop,之后再重新安装Appium Desktop
第11章 Appium Clients
Appium Clients为Appium的客户端,支持Java、Ruby、Python、PHP、JavaScript和C#。
本书是Java版,所以需要下载jar包的。下载java-client-x-x-x.jar包即可。
各版本下载地址:
https://search.maven.org/#search|gav|1|g:"io.appium" AND a:"java-client"
本书Appium会用到java-client-4.1.2.jar或java-client-6.1.0.jar。
将下载的jar包引用到项目里就可以使用Appium了。
第12章 Appium Doctor
Appium Doctor是一个用于验证Appium安装环境的工具,可以诊断出Node.js、Android、IOS环境配置方面的常见问题。
在Mac环境下,直接打开终端输入命令进行安装
npm install -g appium-doctor
安装完成后,在终端执行appium-doctor --ios,会检测Appium的IOS基础环境是否正确,如提示以下信息,证明环境没有问题。
注意:如果在检查环境上提示:Xcode Command Line Tools are NOT installed!
可以再接下来输入yes进行安装 或者 在终端输入xcode-select –install进行安装,安装成功后,再次检查环境配置都成功。
在终端执行appium-doctor,会检测Appium的Android与IOS基础环境是否正确,如提示以下信息,证明环境没有问题。
第13章 模拟器/真机
自动化测试执行的时候是需要在移动设备上的,此时就需要准备模拟器或者是真机。
13.1模拟器
创建模拟器,打开已经安装好的Xcode(位于/Applications/Xcode.app)。
Xcode打开后,随便选择一个工程或者新建一个工程,这里新建一个工程,选择Create a new Xcode project。
默认点击下一步。
输入产品名称后,点击下一步。
选择存放路径(例如:存放到test目录下),之后点击创建。
工程创建完成。并点击此区域,如下图:
IOS Simulators区域就是可以选择不同型号的模拟器,这里选择iPhone 8为例。
之后点击运行。
模拟器启动完成。
注意:此模拟器的IOS SDK版本为11.2,那如果我想用11.2之前的IOS SDK版本要怎么操作呢?打开Download Simulators。
在Components里可以下载到IOS SDK的旧版本了。
最后将IOS模拟器固定在Dock中(这样每次启动IOS模拟器可以从Dock上点击启动,而不用打开Xcode选择或者新建工程中启动了),选中“在Dock中保留”即可。
13.2真机
准备iphone手机,注意:IOS SDK要与手机的版本对应,如果没有就下载对应版本。
例如:使用的真机是11.1.2版本,则IOS SDK要下载11.1版本才可以。
第14章 WebDriverAgent
WebDriverAgent在IOS端实现了一个WebDriver server,借助这个server我们可以远程控制 IOS设备。可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确等。而且真机和模拟器都支持。
官方网址:https://github.com/facebook/WebDriverAgent
下面开始讲解在模拟器/真机上安装WebDriverAgent:
WebDriverAgent安装步骤:
1、进入WebDriverAgent
方式一:在Appium自动化测试过程中,如果使用的是Appium Server。
进入Appium Server安装目录下的WebDriverAgent目录(可以用Spotlight搜索查找):
/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
方式二:在Appium自动化测试过程中或者是用真机调试抓取App元素,如果使用的是Appium Desktop。
进入Appium Desktop安装目录下的WebDriverAgent目录(可以用Spotlight搜索查找):
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
方式三:可以从官网下载WebDriverAgent,之后将整个WebDriverAgent文件拷贝到
Appium Server或者Appium Desktop目录下,覆盖原有WebDriverAgent文件即可。
打开终端,输入命令 git clone https://github.com/facebook/WebDriverAgent
进入从官网下载的WebDriverAgent目录(可以用Spotlight搜索查找):
例如:/Users/test/WebDriverAgent
在Appium自动化测试过程中,运行哪种方式(Appium Server或Appium Desktop),就将此WebDriverAgent文件拷贝覆盖Appium Server或Appium Desktop安装目录下的WebDriverAgent文件即可。
Appium Server安装目录下的WebDriverAgent目录(可以用Spotlight搜索查找):
/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
Appium Desktop安装目录下的WebDriverAgent目录(可以用Spotlight搜索查找):
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
2、在WebDriverAgent当前目录下执行脚本
打开终端,输入命令 sh ./Scripts/bootstrap.sh
注意:
在执行过程中提示报错:Error: Cannot find module 'eslint-config-appium'
解决方法:
在终端执行npm install eslint-config-appium
之后再执行sh ./Scripts/bootstrap.sh
到此步骤为止,就可以用模拟器来进行Appium自动化测试了,在执行的时候WebDriverAgent自动安装到模拟器上。如图所示:
那么模拟器可以了,真机呢?真机要接着往下进行证书签名操作。
3、编译WebDriverAgent.xcodeproj
双击打开当前目录下的WebDriverAgent.xcodeproj文件,默认Xcode会将此文件打开。
在Xcode上登录Apple ID的开发者账号(Xcode--->Preferences--->Accounts中登录)。
TARGETS--->WebDriverAgentLib和WebDriverAgentRunner的Signing选择开发者账号使用的Team和证书(画黑色横线的部分)。
TARGETS--->WebDriverAgentLib和WebDriverAgentRunner的Product Bundle Identifier定义一个新的名字,因为Bundle ID不能重复,可以在原有名字后追加部分内容。
例如:com.facebook.WebDriverAgentLib改为com.facebook.WebDriverAgentLib123
例如:com.facebook.WebDriverAgentRunner改为com.facebook.WebDriverAgentRunner456
之后在Xcode上点击Product--->Build,将工程文件编译一下。
4、真机与Mac相连,将WebDriverAgent安装到真机上(有两种安装方式,任选其一即可)。
方式一:
首先获取真机的UDID,打开终端,输入命令 idevice_id -l
查到的UDID为c5dc675bddf7d1ac6d91783d5224d72b427f8d04
之后还是在当前的WebDriverAgent目录下,打开终端,执行下面的命令安装WebDriverAgent。
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=你的UDID' test
例如:
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=c5dc675bddf7d1ac6d91783d5224d72b427f8d04' test
如果没有报错证明安装成功,同时真机上会安装一个WebDriverAgent软件。
方式二:
在Xcode上选择目标设备(Product--->Destination--->Device),例如:test
选择WebDriverAgentRunner(Product--->Scheme--->WebDriverAgentRunner)。
最后运行Test(Product--->Test)。
此时可以在控制台界面看到设备的IP。如果看不到的话,使用这种方法打开(View--->Debug Area--->Activate Console)。
通过控制台打印出的IP和端口,再加上/status合成一个url地址。
例如http://10.106.17.101:8100/status,然后浏览器打开。会看到输出一串JSON。
如果没有报错证明安装成功,同时真机上会安装一个WebDriverAgent软件。
第15章 Selenium jar
除了使用Appium Clients 的jar包,还要使用Selenium的jar包,比如在测试脚本里使用DesiredCapabilities就需要用到这个包。下载selenium-server-standalone-x-x-x.jar包即可。
下载地址:http://selenium-release.storage.googleapis.com/index.html
根据不同的版本进行下载。
本书Appium章节会用到selenium-server-standalone-2.53.1.jar或selenium-server-standalone-3.12.0.jar。
将下载的jar包引用到项目里就可以使用了。
注意(Appium Clients要与Selenium版本匹配,否则执行脚本会报错):
Appium Clients使用java-client-4.1.2.jar包,则Selenium使用selenium-server-standalone-2.53.1.jar包。
Appium Clients使用java-client-6.1.0.jar包,则Selenium使用selenium-server-standalone-3.12.0.jar包。
第16章 Eclipse
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
官方下载地址:https://www.eclipse.org/downloads/
在Mac环境下安装Eclipse,执行eclipse-jee-oxygen-R-macosx-cocoa-x86_64.dmg默认安装即可。安装完成后,进入应用程序,执行Eclipse.app,即可运行Eclipse程序。