在这之前,请先阅读 在 Mac OS X 上使用 Appium
在 Mac 上配置 Appium
需求
按照官方的说法:
-
iOS
- Mac OSX 10.7+
- XCode 4.5+ 和 Command Line Tools
-
Android
- Mac OSX 10.7+
- JAVA 1.6+
- Android SDK ≥ 16 (SDK < 16 in Selendroid mode)
- ant
- maven
按照我的尝试:
-
Mac OSX 10.7+ 是必备的。 推荐使用最新的
10.9.x
, 我基本都是在最新的系统上实验的。 -
XCode 是必备的。XCode 和 Command Line Tools 其实提供了一些列的开发环境,不仅 iOS 需要, Android 也会用到。所以建议安装最新的 XCode 5.0.2。在最新的 XCode 上, Command Line Tools 的安装方式变了。大家可以直接在命令行运行
xcode-select --install
,会弹出安装界面来。 -
JAVA Android 开发必备。 Mac OSX 上一直觉得 JAVA 不安全,所以不默认安装。需要自己安装配置 JAVA 环境。
-
nodejs —— appium 是用 nodejs 写的,如果要从源代码运行的话,nodejs 还真少不了。另外 appium 也是 nodejs 的一个 module。 我们可以并推荐通过 npm 安装 appium。
很多人在用 npm install 的时候会遇到坑。
- 比如 https 连不上。 这个就需要配置下 (Registry)[https://npmjs.org/doc/registry.html]
- 使用 sudo 安装,在某个版本的 appium 里面,如果你使用 sudo npm install -g appium 安装的话,那么你必须找到这个安装的目录,并赋予其他用户读写权限,否则会出错。
- -g 很多人问 -g 这个选项, -g 的意思是全局安装,装好之后,你可以直接在命令行调用。
- 更新升级 appium ——
sudo npm update -g appium
- 安装某个版本的 appium ——
sudo npm install -g appium@0.12
以上软件的安装,我默认大家都会。我自己的环境是使用 (homebrew)[http://brew.sh/] 配合管理软件的。比如 ant 安装:brew install ant
。 非常的方便。
安装 Appium
Mac 下面一般有三种安装方法:
- 直接下载 dmg 文件。地址在 https://bitbucket.org/appium/appium.app/downloads/。有可能会被墙, vpn 自备。
- 用 nodejs 的 npm 安装。强烈推荐。
- 从源代码执行。
Doctor
在软件都安装好之后,需要配置各种环境。在以前,需要运行起 Appium 的测试代码,发现一个环境的坑,填一个。现在 Appium 请了一个医生 —— appium-doctor。
在我们使用 npm 安装好 Appium 好之后,大家可以运行下 appium-doctor。
➜ ~ appium-doctor Running iOS Checks ✔ Xcode is installed at /Applications/Xcode.app/Contents/Developer ✔ Xcode Command Line Tools are installed. ✔ DevToolsSecurity is enabled. ✔ The Authorization DB is <span class="nb">set </span>up properly. ✔ Node binary found at /usr/local/bin/node ✔ iOS Checks were successful. Running Android Checks ✔ ANDROID_HOME is <span class="nb">set </span>to <span class="s2">"/Applications/adt-bundle-mac-x86_64-20131030/sdk"</span> ✔ JAVA_HOME is <span class="nb">set </span>to <span class="s2">"/System/Library/Frameworks/JavaVM.framework/Home."</span> ✔ ADB exists at /Applications/adt-bundle-mac-x86_64-20131030/sdk/platform-tools/adb ✔ Android exists at /Applications/adt-bundle-mac-x86_64-20131030/sdk/tools/android ✔ Emulator exists at /Applications/adt-bundle-mac-x86_64-20131030/sdk/tools/emulator ✔ Android Checks were successful.
可以看到,我的系统的环境都配置好了。 我们来试试看,填错一个环境变量,比如 ANDROID_HOME
➜ ~ appium-doctor Running iOS Checks ✔ Xcode is installed at /Applications/Xcode.app/Contents/Developer ✔ Xcode Command Line Tools are installed. ✔ DevToolsSecurity is enabled. ✔ The Authorization DB is <span class="nb">set </span>up properly. ✔ Node binary found at /usr/local/bin/node ✔ iOS Checks were successful. Running Android Checks ✖ ANDROID_HOME is <span class="nb">set </span>but does not exist on the file system at <span class="s2">"/Axpplications/adt-bundle-mac-x86_64-20131030/sdk"</span> Appium-Doctor detected problems. Please fix and rerun Appium-Doctor.
Appium-Doctor 会帮助你定位环境配置问题。 其实使用 GUI 的 appium 在启动的时候,也会执行一遍 Appium-doctor 以确保环境的正确。
iOS
必备:
-
iOS 开发证书
一年 99 美元免不了。xCode 5 之后,苹果把开发证书,发布证书,真机调试这一套东西都自动化了。只需要在 Preferences => Accounts 里面输入你注册的开发者账号。
-
真机
iPhone, iPad, iTouch 随便搞一台。
-
模拟器
iOS 应用测试
Appium 在 iOS 上的实现底层调用的 instruments 的 UIAutomation。有兴趣的同学可以研究下,推荐书籍 Test iOS Apps with UI Automation。
对于一个应用,我们首先要把它 build 成一个 app。 xcode 提供了 xcodebuild
命令。详见 xcodebuild 文档
然后对于模拟器来说,只需在 cap 里指定 app 地址就可以了。比如:
<span class="n">File</span> <span class="n">appDir</span> <span class="o">=</span> <span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">System</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"user.dir"</span><span class="o">),</span> <span class="s">"../../../apps/TestApp/build/Release-iphonesimulator"</span><span class="o">);</span>
<span class="n">File</span> <span class="n">app</span> <span class="o">=</span> <span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">appDir</span><span class="o">,</span> <span class="s">"TestApp.app"</span><span class="o">);</span>
<span class="n">DesiredCapabilities</span> <span class="n">capabilities</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DesiredCapabilities</span><span class="o">();</span>
<span class="n">capabilities</span><span class="o">.</span><span class="na">setCapability</span><span class="o">(</span><span class="n">CapabilityType</span><span class="o">.</span><span class="na">BROWSER_NAME</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>
<span class="n">capabilities</span><span class="o">.</span><span class="na">setCapability</span><span class="o">(</span><span class="n">CapabilityType</span><span class="o">.</span><span class="na">VERSION</span><span class="o">,</span> <span class="s">"6.0"</span><span class="o">);</span>
<span class="n">capabilities</span><span class="o">.</span><span class="na">setCapability</span><span class="o">(</span><span class="n">CapabilityType</span><span class="o">.</span><span class="na">PLATFORM</span><span class="o">,</span> <span class="s">"Mac"</span><span class="o">);</span>
<span class="n">capabilities</span><span class="o">.</span><span class="na">setCapability</span><span class="o">(</span><span class="s">"device"</span><span class="o">,</span> <span class="s">"iPhone Simulator"</span><span class="o">);</span>
<span class="n">capabilities</span><span class="o">.</span><span class="na">setCapability</span><span class="o">(</span><span class="s">"app"</span><span class="o">,</span> <span class="n">app</span><span class="o">.</span><span class="na">getAbsolutePath</span><span class="o">());</span>
<span class="n">driver</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SwipeableWebDriver</span><span class="o">(</span><span class="k">new</span> <span class="n">URL</span><span class="o">(</span><span class="s">"http://127.0.0.1:4723/wd/hub"</span><span class="o">),</span> <span class="n">capabilities</span><span class="o">);</span>
对于真机,那你需要build能在你设备上运行的 app 并把它烧到真机上去。你可以直接在 xcode 里选择真机运行或者使用 fruitstrap (未试用过) 推送到真机上。
之后,启动 Appium 时候,需要指定真机 UDID 和 app 的 bundle id。例如:appium -U 45f082689dbaebb0ffa3620b3ae22ad9faff9a30 --app io.appium
iOS web 测试
对于普通的 Webdriver 代码,Appium 也可以充当一个 Selenium Server。
在模拟器上,只要配置下 cap 的 app 参数就可以了。
<span class="o">{</span>
<span class="nl">app:</span> <span class="err">'</span><span class="n">safari</span><span class="err">'</span>
<span class="o">,</span> <span class="nl">device:</span> <span class="err">'</span><span class="n">iPhone</span> <span class="n">Simulator</span><span class="err">'</span>
<span class="o">,</span> <span class="nl">version:</span> <span class="err">'</span><span class="mf">7.0</span><span class="err">'</span>
<span class="o">}</span>
p.s 注意自己的版本号。
在真机上,Appium 还不能直接调用启动 Safari。我想其根本原因应该是和苹果的封闭性有关,之前 Webdriver 上的 SafariDriver 也是破费周折。苹果不允许你对他的产品有任何倾入行为。
不过英雄们还是有很多解决方法,坊间流传两个曲线救国的方法,可以参见 http://testerhome.com/topics/313。