Appiumを使ってみた話：[インストールまで成功したけど・・・]

[Classi Advent Calendar 2016 - Qiita](http://qiita.com/advent-calendar/2016/classi) 10日目です。

Classi ネイティブアプリ担当の @kitaharamikiya です。


今回は、Appiumを使ってみた話を書きます。

# 1. Appiumとは

```
Appiumはネイティブ、 ハイブリッド型モバイルアプリのために開発された
オープンソースのテスト自動化フレームワークです
```

[公式サイト](http://appium.io/)から引用させていただきました。

`selenium` のMobile用に拡張したということで、Seleniumを使ったことがあれば
比較的簡単に書けるかと思います。


# 2. 必要になった経緯

iOSアプリ申請後リジェクトされてしまいました。。。

理由が大変お恥ずかしいのですが、
`「iOSアプリ申請に使用しているアカウントでログインできないからレビューできねーよ」`
的なことを言われました。

Apple様に多大なるご面倒をおかけしましたし、
審査待ちの3日間を無駄にしてしまいました。

ログイン部分は、Webviewを使用していて、そこで認証が通ればログインができるのですが、
Webviewとロジックの部分で連携ができていませんでした。。。

もちろん動作確認もしてはいますが、
Classi アプリはログインが2種類あり、もう一方のログインを試していませんでした。。。

なかなかテストに割く時間がなかったのですが、
こんな恥ずかしくてしょーもない理由でリジェクトされるのは懲り懲りなので、
テストを書くことにしました。

# 3. インストールしてみる

とりあえずローカルにインストールしてみます。
## 3-1 事前準備
#### 3-1 Java をインストールします
#### 3-2 Android SDKをインストールします
#### 3-3 Xcodeをインストールします。
#### 3-4 Homebrewをインストールします (Mac)
#### 3-5 Node.jsをインストールします。

```
$ brew install node
```

## 3-2 Appium をインストールします
- Windows
 - [公式サイト](http://appium.io/)からダウンロードできるようです(未検証です:bow:)

- Mac
 - 公式サイトからダウンロード
     - [公式サイト](http://appium.io/)からダウンロードできるようです(未検証です:bow:)
 - ターミナルでの方法 (今回はこちらでやりました)
     -  Appium ダウンロード <br>
     　　※ sudo　は使わないとのこと(実行時、ユーザー権限まわりでエラーになるそう、、)  
     
     ```
     $ npm install -g appium   # appium をインストール
     $ npm install -g wd       # appium clientをインストール
     $ npm install -g appium-doctor # appium 診断ツールをインストール
     ```
     - appium-doctor
         - 出現したエラーを解消する
             - `xcode-select --install` ：Xcode Command Line Toolsをインストール
             - `brew install carthage`  ：carthage　をインストール
             - `JAVA_HOME` と `ANDROID_HOME` を.bash_profileに記載 (PATH通しているだけではだめなんですね。。)<br>
          ※ `JAVA_HOME`が読み込まれないのは、`jenv` の影響でした。。


- 起動と終了コマンド

```
# 起動
$ appium &
```

```
# 終了
$ killall -9 node
```


## 3-3 サンプルコードを試してみる
1. サンプルソースをダウンロード
`$ git clone https://github.com/appium/sample-code.git APPIUM_SAMPLE` 

2. cloneしたプロジェクトのルートに移動する
3. サンプルコードのルートに移動する
`$cd sample-code/examples/node`
4. 実行
`$ node android-webview.js`

5.エラーでハマる。。。

- モジュールがない
 - `npm-install-missing` があるんですね。知らなかった。。。
- mochaを入れないといけない？
 - `$ npm install -g mocha`  
- エミュレーターが起動していないから？
 - Dockerが起動していて、エミュレータが起動しなかった。。。(Virtual boxなんて起動してねーよと思いながら)
- `$ mocha android-simple.js`
 - 別のエラーがでる

 ```
  1) android simple "before all" hook:
     Error: [init({"browserName":"","appium-version":"1.3","platformName":"Android","platformVersion":"4.4.2","deviceName":"Android Emulator","app":"http://appium.github.io/appium/assets/ApiDemos-debug.apk"})] The environment you requested was unavailable.
      at node_modules/wd/lib/webdriver.js:129:15
      at Request._callback (node_modules/wd/lib/http-utils.js:87:7)
      at Request.self.callback (node_modules/request/request.js:368:22)
      at Request.<anonymous> (node_modules/request/request.js:1219:14)
      at IncomingMessage.<anonymous> (node_modules/request/request.js:1167:12)
      at endReadableNT (_stream_readable.js:974:12)
      at _combinedTickCallback (internal/process/next_tick.js:74:11)
      at process._tickCallback (internal/process/next_tick.js:98:9)

  2) android simple "after all" hook:
     Error: [quit()] Unexpected data in simpleCallback.
      at exports.newError (node_modules/wd/lib/utils.js:139:13)
      at PromiseWebdriver.<anonymous> (node_modules/wd/lib/callbacks.js:42:12)
      at cb (node_modules/wd/lib/webdriver.js:160:22)
      at node_modules/wd/lib/webdriver.js:174:5
      at Request._callback (node_modules/wd/lib/http-utils.js:87:7)
      at Request.self.callback (node_modules/request/request.js:368:22)
      at Request.<anonymous> (node_modules/request/request.js:1219:14)
      at IncomingMessage.<anonymous> (node_modules/request/request.js:1167:12)
      at endReadableNT (_stream_readable.js:974:12)
      at _combinedTickCallback (internal/process/next_tick.js:74:11)
      at process._tickCallback (internal/process/next_tick.js:98:9)
 ``` 

# 4. 結論
- インストールはできた。
- サンプルコードを動かすことができなかった。。=> 原因調査中
- しょーもないミスで、時間を潰す前にテストは書こうという話

# 5. TODO
- サンプルコードは諦めて、自分でアプリとコマンドを書いて試してみる


# 6. 書籍

[実践 Appium](https://www.amazon.co.jp/dp/4873117844/ref=sr_1_1?s=books&ie=UTF8&qid=1481368348&sr=1-1&keywords=Appium)(Amazonリンクです)を購入して読んででいます。

2016/11/26 くらいにでたのに、FirefoxOSの事も書いてあり、ちょっと古いのかな。。