在 Mac 上配置 Appium 问题收集

在这之前,请先阅读 在 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

按照我的尝试:

  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 的时候会遇到坑。

    • 比如 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 下面一般有三种安装方法:

  1. 直接下载 dmg 文件。地址在 https://bitbucket.org/appium/appium.app/downloads/。有可能会被墙, vpn 自备。
  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 <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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值