appiumを使ったWebテスト for Android OS @Windows 8.1

# はじめに
seleniumはとても便利なWebテスト環境です。各環境向けのWebDriverを使うことによって同じテストを各環境で行うことができるようになります。例えば、IE向け、Google Chrome向けWebDriverを使って同じ画面のテストを実施することができます。

かつては、SeleniumプロジェクトがAndroid OS向けWebDriverを提供していましたが、現在は提供しなくなっており、ThirdPartyのWebDriverが提供されています。

今回は、そのうちの一つである[appium](http://appium.io/ "sppium")が使えるかどうか調べました。特に、標準ブラウザを使ったWebアプリのテストについて調べました。

実行環境は、Java/JUnitです。

# appium for Windows

appiumは、node.jsを使っているため、Windows環境で使うためには、事前準備が大変でしたが、[appium for windows](https://bitbucket.org/appium/appium.app/downloads/AppiumForWindows-1.0.0.zip "appium for windows")は、node.jsを梱包しているためインストールがとても簡単になりました。

ダウンロードしたzipファイルを解凍した中に含まれるappium.exeを実行します。
（表示されるまで少し時間がかかります。）
右上のロケットアイコンを押下してサーバを起動します。

![20140810115117.png](https://qiita-image-store.s3.amazonaws.com/0/5247/9f2fbe4d-2312-076f-0314-2d8c4b6bc6b6.png "20140810115117.png")

# サンプルコード実行
[github(appium/sample-code)](https://github.com/appium/sample-code.git "github(appium/sample-code)")からサンプルコードをダウンロードします。

## サンプルコード修正
ブラウザサンプル(SafariTest)は、iOS版のSafariを使う実装になっていましたので、Android版Chromeを実行するよう修正しました。
修正後

```java
 public void setUp() throws Exception {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName","Android Emulator");
        capabilities.setCapability("platformVersion", "4.4");
        capabilities.setCapability("platformName","Android");
        capabilities.setCapability("browserName", "chrome");
        driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                capabilities);
    }
```

修正前

```java
public void setUp() throws Exception {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "iPhone Simulator");
        capabilities.setCapability("platformName", "iOS");
        capabilities.setCapability("platformVersion", "7.1");
        capabilities.setCapability("browserName", "safari");
        driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                capabilities);
    }
```

## サンプルコード(java)実行
apache mavenを使って実行します。全部のテストを実行する場合には、-D部分を省略して、``` mvn test```を実行します。ContactsやSettingアプリを動かすサンプルが含まれていました。

```
> cd サンプルコード/sample-code/examples/java/junit
> mvn -Dtest=com.saucelabs.appium.SafariTest test
```

![20140810115401.png](https://qiita-image-store.s3.amazonaws.com/0/5247/abee0465-38b7-9222-bfa5-0ceb97ee137d.png "20140810115401.png")

## テスト結果
コンソール上に表示されます。
```
[INFO] ------------------------------------------------------------------------
[INFO] Building sauce_appium_junit 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
 -------------------------------------------------------
 T E S T S
 -------------------------------------------------------
Running com.saucelabs.appium.SafariTest
https://saucelabs.com/test/guinea-pig
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 23.065 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24.992 s
[INFO] Finished at: 2014-08-10T10:58:51+09:00
[INFO] Final Memory: 11M/213M
[INFO] ------------------------------------------------------------------------
```

# まとめ
appiumを使ってSeleniumテストをAndroid OSに対しても使うことができます。

# 追記
Android OS 4.4.3のNexus7(2012)で動作検証しました。