在这之前,请先阅读 在 Mac OS X 上使用 Appium

在 Mac 上配置 Appium

需求

按照官方的说法:

按照我的尝试:

  1. Mac OSX 10.7+ 是必备的。 推荐使用最新的 10.9.x, 我基本都是在最新的系统上实验的。

  2. XCode 是必备的。XCode 和 Command Line Tools 其实提供了一些列的开发环境,不仅 iOS 需要, Android 也会用到。所以建议安装最新的 XCode 5.0.2。在最新的 XCode 上, Command Line Tools 的安装方式变了。大家可以直接在命令行运行 xcode-select --install,会弹出安装界面来。

  3. JAVA Android 开发必备。 Mac OSX 上一直觉得 JAVA 不安全,所以不默认安装。需要自己安装配置 JAVA 环境。

  4. nodejs —— appium 是用 nodejs 写的,如果要从源代码运行的话,nodejs 还真少不了。另外 appium 也是 nodejs 的一个 module。 我们可以并推荐通过 npm 安装 appium。

    很多人在用 npm install 的时候会遇到坑。

以上软件的安装,我默认大家都会。我自己的环境是使用 (homebrew)[http://brew.sh/] 配合管理软件的。比如 ant 安装:brew install ant。 非常的方便。

安装 Appium

Mac 下面一般有三种安装方法:

  1. 直接下载 dmg 文件。地址在 https://bitbucket.org/appium/appium.app/downloads/。有可能会被墙, *** 自备。
  2. 用 nodejs 的 npm 安装。强烈推荐。
  3. 从源代码执行。

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 set up properly.
✔ Node binary found at /usr/local/bin/node
✔ iOS Checks were successful.

Running Android Checks
✔ ANDROID_HOME is set to "/Applications/adt-bundle-mac-x86_64-20131030/sdk"
✔ JAVA_HOME is set to "/System/Library/Frameworks/JavaVM.framework/Home."
✔ 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 set up properly.
✔ Node binary found at /usr/local/bin/node
✔ iOS Checks were successful.

Running Android Checks
✖ ANDROID_HOME is set but does not exist on the file system at "/Axpplications/adt-bundle-mac-x86_64-20131030/sdk"
Appium-Doctor detected problems. Please fix and rerun Appium-Doctor.

Appium-Doctor 会帮助你定位环境配置问题。 其实使用 GUI 的 appium 在启动的时候,也会执行一遍 Appium-doctor 以确保环境的正确。

iOS

必备:

iOS 应用测试

Appium 在 iOS 上的实现底层调用的 instruments 的 UIAutomation。有兴趣的同学可以研究下,推荐书籍 Test iOS Apps with UI Automation。

对于一个应用,我们首先要把它 build 成一个 app。 xcode 提供了 xcodebuild 命令。详见 xcodebuild 文档

然后对于模拟器来说,只需在 cap 里指定 app 地址就可以了。比如:

File appDir = new File(System.getProperty("user.dir"), "../../../apps/TestApp/build/Release-iphonesimulator");
File app = new File(appDir, "TestApp.app");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability(CapabilityType.VERSION, "6.0");
capabilities.setCapability(CapabilityType.PLATFORM, "Mac");
capabilities.setCapability("device", "iPhone Simulator");
capabilities.setCapability("app", app.getAbsolutePath());
driver = new SwipeableWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

对于真机,那你需要 build 能在你设备上运行的 app 并把它烧到真机上去。你可以直接在 xcode 里选择真机运行或者使用 fruitstrap (未试用过) 推送到真机上。

之后,启动 Appium 时候,需要指定真机 UDID 和 app 的 bundle id。例如:appium -U 45f082689dbaebb0ffa3620b3ae22ad9faff9a30 --app io.appium

iOS web 测试

对于普通的 Webdriver 代码,Appium 也可以充当一个 Selenium Server。

在模拟器上,只要配置下 cap 的 app 参数就可以了。

{
  app: 'safari'
  , device: 'iPhone Simulator'
  , version: '7.0'
}

p.s 注意自己的版本号。

在真机上,Appium 还不能直接调用启动 Safari。我想其根本原因应该是和苹果的封闭性有关,之前 Webdriver 上的 SafariDriver 也是破费周折。苹果不允许你对他的产品有任何倾入行为。

不过英雄们还是有很多解决方法,坊间流传两个曲线救国的方法,可以参见 http://testerhome.com/topics/313


↙↙↙阅读原文可查看相关链接,并与作者交流