之前刚接触客户端测试的时候,appium还是1.5,xcode还是7,那时的苹果还支持UIAutomation框架,当时的UI自动化case写的也是很顺利,后来xcode升级后,楼主试用过beta版本的1.6的appium维护之前的case,当时还没有对应的最新版的客户端,所以当时获取界面元素,楼主还是很low逼的使用打印页面的方式。后来跳槽后,新的环境并没有UI自动化这种东西,所以一直就废弃了,不过有个比较头疼的问题一直存在,核心埋点问题,埋点的异常会导致各种大盘数据的抖动,为了保证核心埋点的稳定,打算重新搞一搞appium,利用UI自动化去校验核心埋点。在重新配置appium环境的时候默默的表示还是遇到了很多坑的,所以就记录一下,给同行的tester们一点启示。
总体介绍
本文会介绍包括xcode7以及最新的xcode9的对应的appium的使用小记,不过之前版本的很多疑问点已经没有印象了,所以会着重记录新版本的appium与xcode的使用心得。之前在运行过程中,一直对WD编译成功后的一个server地址感兴趣,就在网上找的过一篇博客,博主主要从appium原理层面分析的一下appium,虽然不是非常深刻,但个人觉得值得大家读一读:Appium 从入门到原理
本文主要分为如下几个部分:
- 新版的appium以及相关依赖的安装
- WebDriverAgent的安装与运行
- Appium-Desktop安装与运行
- DesiredCapabilities参数设置
- 遇到的问题点记录
新版appium以及相关依赖安装
安装必备的依赖
libimobiledevice
appium iOS真机调试依赖一个重要的第三方开源包:libimobiledevice,它同iTools一样,都是可以替代iTunes,进行iOS设备管理的工具,使用Homebrew可以轻松获取并安装:1brew install libimobiledeviceios-deploy
ios-deploy是一个使用命令行安装ios app到连接的设备的工具,原理是根据os x命令行工程调用系统底层函数,获取连接的设备、查询/安装/卸载app。类似的工具有Fruitstrap,ideviceinstaller、node-ios-device等. 可以使用npm直接安装1npm install -g ios-deployappium安装
appium本质上就是一个Nodejs应用,我们可以使用npm直接进行安装,安装完毕后就可以直接命令行启动了。1npm install -g appium
本地已有老版本appium时,使用上面的命令可直接更新至最新版本,或者指定版本:
- appium-doctor
appium-doctor是用来检测安装环境是否正常的命令,同样使用npm直接安装1npm install appium-doctor -g
安装成功后,使用该命令可以检测安装环境:appium-doctor --ios
上面是全部成功的提示,如果在安装过程中某项打叉的,就对应安装就可以。
替换appium中的WebDriverAgent
- 下载最新的WebDriverAgent代码,链接如下:WebDriverAgent
- 进入下载后的WebDriverAgent目录,执行
./Scripts/bootstrap.sh - 直接用Xcode打开该project,
WebDriverAgent.xcodeproj - 如果使用模拟器测试,此时直接选择模拟器,然后
Cmd+U就可以运行了 - 真机调试需要配置
WebDriverAgentLib和WebDriverAgentRunner的证书 ,勾选你的证书什么的注册一下就好。如下图所示:

其中使用xcode的自动管理证书的方式时,如果是免费版的个人证书,还需要修改下WebDriverAgent的BundleID,我一般会在后面加上我自己的后缀,如下图所示:
- 此时选中WebDriverAgentRunner这个target,并选中自己的设备,
Cmd+U即可顺利运行。运行成功后即可以在Xcode控制台打印出一个ip地址和端口号,具体如下图所示:
- 在浏览器输入
http://(iP地址):(端口号)/status,如果网页显示了一些json格式的数据,则说明运行成功
- 进入到Appium中的WebDriverAgent目录,目录路径如下
(/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/),将自己下载并编译成功后的WebDriverAgent替换Appium原有的WebDriverAgent。
Appium-Desktop安装与运行
安装
在Appium-Desktop中下载最新版本的Appium-Desktop.
运行程序
- 运行Appium-Desktop
- 开启start server
- 点击start new session
- 在 Desired Capabilities 中输入相关的参数后点击
Start Session
- 运行成功后,会弹出一个控制界面,在该界面中可以控制手机上正在运行的程序

- 点击界面上方中心的录制按钮,可以将你对手机端的操作代码化
DesiredCapabilities参数设置
在运行Appium-Desktop时,设置Desired Capabilities参数遇到一些小问题,就顺便看了官方版本的针对这些参数的解释,把常用的参数简单翻译了一下,基本如下表所示:
| 参数名称 | 参数说明 | 可选条件 |
|---|---|---|
| automationName | 想使用的自动化引擎 | Appium, Selendroid |
| platformName | 平台的名称 | iOS, Android, FirefoxOS |
| platformVersion | 移动设备的系统版本号 | 11.0, 10.0 |
| deviceName | 移动设备的名称 | instruments -s devices获取 |
| app | 安装包路径 | /abs/path/to/my.apk or http://myapp.com/app.ipa |
| newCommandTimeout | 等待新命令的最长时间,超时后退出 | 默认是60s |
| language | 模拟器的语言设置 | fr |
| locale | 模拟器的地区设置 | fr_CA |
| udid | 设备号 | instruments -s devices获取 |
| orientation | 模拟器的横竖屏设置 | LANDSCAPE or PORTRAIT |
| noReset | 在当前session前不重置app状态 | true, false |
| fullReset | ios删除文件夹,Android删除app数据 | true, false |
实际运行
环境依赖
楼主一般都是使用Python进行客户端的UI自动化,所以在真正运行楼主的case之前,需要先把相关的依赖环境安装完成
- 安装python,一般mac自带
brew install python 安装Python的appium模块:
123git clone git@github.com:appium/python-client.gitcd python-clientpython setup.py install下载测试demo:
里面主要写了个简单的iOS工程文件,并包含一个简单的Python测试脚本运行脚本
- 打开demo工程后,配置target的签名,在Demo的根目录执行编译指令,编译出一个app文件xcodebuild -sdk iphoneos -target XXXXX -configuration Release,编译成功后app文件的地址会打印在命令行中:

配置python文件
打开appiumSimpleDemo中的appiumSimpleDemo.py文件,将,修改setup中的几个参数,将app的路径,设备的相关信息修改成当前连接设备的信息。1234567891011121314def setUp(self):app = os.path.abspath('/Users/didi/sxl/code/script/appiumSimpleDemo/build/Release-iphoneos/appiumSimpleDemo.app')self.driver = webdriver.Remote(command_executor = 'http://127.0.0.1:4723/wd/hub',desired_capabilities = {'app':app,'platformName': 'iOS','platformVersion': '11.0','deviceName': 'sxliPhone8','bundleId': 'com.cvte.appiumSimpleDemo.sxl','udid': '6180d7804ecb56f73154340edb482a72b09351c4'})运行Appium程序
打开之前下载安装的Appium,并开启服务。运行python测试文件
在appiumSimpleDemo.py所在的目录运行python appiumSimpleDemo.py,如果之前设置都没有出错,那么程序应该会在手机上成功运行,并自动点击了entry next view进入到了下一个界面,过了2s后会重新返回第一个界面
问题小记
Could not launch “WebDriverAgentRunner”
首次运行WebDriverAgentRunner时会出现如下图的报错,该报错主要测试机未信任该开发者,遇到这种情况,去测试机的设置–通用–描述文件与设备管理–找到当前开发者账号的应用,点击信任即可。
WD安装失败App installation FAILED
WDtest成功一次后,再次编译时,偶现会出现如下的报错信息:
出现这个问题主要是覆盖安装的原因,把测试机上的WD删除后重新运行即可成功WebDriverAgentRunner运行成功后,链接打不开
有些机器通过手机的IP和端口还是不能访问,这种时候需要将手机的端口转发到Mac上,解决这个问题的时候,楼主先是尝试了使用iproxy的方式,具体命令如下:1$ iproxy 8100 8100
此时通过访问http://localhost:8100/status可确认WDA是否运行成功,而inspector的地址是http://localhost:8100/inspector, inspector是用来查看UI的图层,方便写测试脚本用的。
使用这种方式有一点比较不能忍,进程杀了之后的转发就停止不可用了,所以在此在提供另外一种方式:sudo vi /etc/hosts
加:
- appium客户端Start Session时报错,original error:SDK ‘11.0’not in list of simctl sdks