Appium的搭建有两种方式:
1、使用Appium gui,直接下载appium.dmg
2、使用Terminal命令行安装(强烈推荐)
一、使用Appium gui
1、下载Appium客户端
https://bitbucket.org/appium/appium.app/downloads/
(这里需要自备梯子,极其难以下载)
2、安装完后运行appium-doctor检查配置项
然后会看到一大堆的报错,一一来解决就行。主要是JAVA_HOME、ANDROID_HOME、APPIUM_HOME、Xcode Command Line Tools、Carthage等等。
// JAVA Home
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
1.8.0_45, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
找到JAVA_HOME后,我们把它配置到.bash_profile中去。其他的如ANDROID_HOME之类的也类似,都配置到bash_profile中就可以了。最后Xcode Command Line 是可以自动修复的,其余的收工处理。
// 创建.bash_profile文件
$ touch .bash_profile
// 输入 open -e .bash_profile
$ open -e .bash_profile
全部修复完毕,会看到提示Everything looks good, bye!
二、使用Terminal命令行安装
前言,我们知道Appium也是依赖node环境的,我们这里最好是也用brew来配置node环境。安装完成后,检查输入$ node -v检查是否安装正确
1、使用npm命令安装Appium
这里需要注意的是先得授权,避免权限问题。然后是挂个代理科学上网,这是开发人员必备技能啊。
$sudo chmod -R 777 /usr/local
$ npm install -g appium
官网介绍:http://appium.io/getting-started.html?lang=zh
2、使用npm命令安装appium-doctor
$ npm install -g appium-doctor
3、使用appium-doctor检查appium环境
跟上面安装客户端一样,那里报错就改哪里。没有配置环境的,配置环境。没有安装的比如Carthage就上官网下个包安装下,直到最后一切ok为止。
Carthage链接:https://github.com/Carthage/Carthage#installing-carthage
4、都没问题后,运行一下试试吧。
三、其他可能出现的问题
1、早期的版本还遇到了和max OX 10.12更高系统不兼容的地方
解决方案也很简单,参见stackoverflow:http://stackoverflow.com/questions/40129794/how-to-fix-error-could-not-detect-mac-os-x-version-from-sw-vers-output-10-12/40168992#40168992
主要就是相关代码位置添加具体的版本控制:
grep -rl "Could not detect Mac OS X Version from sw_vers output:" /Applications/Appium.app/
1. 在版本控制中添加’10.12’
2. 添加.trim()方法
try {
stdout = (await exec('sw_vers', ['-productVersion'])).stdout.trim();
}
2、Error: targetSdkVersionFromManifest failed. Original error: Cannot read property '1' of null
这个问题已经在2.9.1 fix,(权限问题API>23)
https://github.com/appium/appium/issues/7353
需要更新appium-adb,这里一定要在node目录下执行,要不然会提示失败!!!
$ npm install appium-adb@2.9.1
3、修改源代码避免每次运行都安装setting\unlock\ime等apk,这里以1.6.3版本为例子
文件: /usr/local/lib/node_modules/appium/node_modules/appium-android-driver/lib/driver.js,注释以下几句代码
await this.adb.uninstallApk(this.opts.appPackage);
await helpers.installApkRemotely(this.adb, this.opts);
await helpers.resetApp(this.adb, this.opts.app, this.opts.appPackage, this.opts.fastReset);
await this.checkPackagePresent();
文件:/usr/local/lib/node_modules/appium/node_modules/appium-android-driver/build/lib/driver.js 注释以下几句代码
return _regeneratorRuntime.awrap(_androidHelpers2['default'].resetApp(this.adb, this.opts.app, this.opts.appPackage, this.opts.fastReset));
return _regeneratorRuntime.awrap(this.adb.uninstallApk(this.opts.appPackage));
return _regeneratorRuntime.awrap(_androidHelpers2['default'].installApkRemotely(this.adb, this.opts));
return _regeneratorRuntime.awrap(this.checkPackagePresent());
文件:/usr/local/lib/node_modules/appium/node_modules/appium-android-driver/lib/android-helpers.js 注释以下几句代码
await adb.install(unicodeIMEPath, false);
await helpers.pushSettingsApp(adb);
await helpers.pushUnlock(adb);
文件 /usr/local/lib/node_modules/appium/node_modules/appium-android-driver/build/lib/android-helpers.js 替换以下几句代码
return _regeneratorRuntime.awrap(helpers.initUnicodeKeyboard(adb)) 替换为return context$1$0.abrupt('return', defaultIME);
return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb)); 替换为return context$1$0.abrupt('return', defaultIME);
return _regeneratorRuntime.awrap(helpers.pushUnlock(adb)); 替换为return context$1$0.abrupt('return', defaultIME);
4、更新appium到最新版
$ npm install -g appium