はっきり言ってめっちゃハマりました( ;´Д`)
ので、あったことをつらつらとメモしていこうと思います。
まずはこちらから諸々をダウンロード。
利用するにはNode.jsが必要なので、インストールしていない場合は事前にインストールしておく必要があります。
ちなみにnodebrew
などのNode.js自体のバージョン管理ができるツールから導入したほうがいいでしょう。
Node.jsが準備出来たら、以下のように必要なモジュールをインストールします。
npm install -g appium
npm install wd
appium &
appiumはサーバです。
起動すると以下のようにメッセージが表示され、接続を待機します。
(wd
はWebDriverです。Seleniumの作者がAppiumを作っているので、Seleniumも調べてみるとより分かりやすいと思います)
info: Welcome to Appium v1.0.0-beta.1 (REV 6fcf54391fb06bb5fb03dfcf1582c84a1d9838b6)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: socket.io started
Rubyのインストール
ちょっと簡単にテストためそーっていう気軽な気持ちで始めたものの、各所でハマるハマる。
- Mac OSXに最初から入ってるRubyだとselenium-webdriverがインストール出来ない
- rbenvでruby 2.1.1がインストールできない
- やっとruby新しくしたもののselenium-webdriverのdocumentインストールで止まる
と散々でした。
最終的にはrbenv
を使ってruby 2.2.0dev
を手動ビルドし、ドキュメントのインストールをスキップすることでなんとかテスト起動まで持って行きました。
rbenvのインストール
インストールでは以下の記事を参考にしました。
ちなみに途中でたエラーはこんな感じのものです↓
Last 10 log lines:
compiling ossl_x509crl.c
1 warning generated.
compiling ossl_x509ext.c
compiling ossl_x509name.c
compiling ossl_x509req.c
compiling ossl_x509revoked.c
compiling ossl_x509store.c
installing default openssl libraries
linking shared-object openssl.bundle
make: *** [build-ext] Error 2
OpenSSLやreadlineがうんぬん、という記事を見かけて色々やってみたものの解決せず。
結局、手動ビルドの方法でインストールしました。
selenium-webdriverのインストール
なぜかこれが最初から入っているRubyではインストールできませんでした。
なので、rbenv
を使ってruby 2.2.0dev
をインストールし、そこから改めてインストール。
ただ、そのインストールでもドキュメントのパースで止まる(CPU使用率が100%になる)という問題があり、以下のようにドキュメントのインストールをスルーする設定を書いて対処しました。
$ vi ~/.gemrc
gem: --no-ri --no-rdoc
rspecをインストール
こちらもgem
からインストールします。
sudo gem install rspec
これで諸々の準備が整いました。
Appium起動・・instrumentsのcrashでハマる
準備出来ていざテスト! というところでまたハマりました。
なぜかinstrumentsのstart upでcrashする。
色々なエラーでググってみるもこれといった解決策なし。
色的に緑だったのでしばらくエラーと気付かずスルーしていたんですが、どうもよくよく見てみるとnodeが見つからないよって書いてあった。
Script threw an uncaught JavaScript error: Could not find node, where is it?
いやいやいや、appiumさん、あなたnodeで動いてるんですけど、とか思いながらも検索してみるとAppiumのgithubのissueに上がってた。
回答としてはnodeの検索ロジックを変えてみるよ、ってことだったんだけど、ちょっと前に立てられたものだったのでおそらくまだ解決したものは上がってない模様。
そこで、最終的に/usr/local/bin/node
に対してnodebrewで入れたnodeへのパスをシンボリックリンクを張ってみて試すことに。
ドキドキしながらテストを実行すると・・・ 動いた!!!!!
ということで、node見つからないんだけどって言われている場合はシンボリックリンクを張って解決するとうまくテストが動きます。
無事起動、そしてアプリ一掃へ( ;´Д`)
やっと動いたーと思っていたら、最後に問題がありました。
なんと、appiumはテスト完了後にデフォルトで(?)シミュレータの状態をclean upしてくれちゃうようです。
なのでテストが無事に終わったあとシミュレータを見ると、今まで開発時にインストールされていたアプリやらが綺麗さっぱりに。
まぁシミュレータなので大した問題にはなりませんが、毎回消されるのは困る。
ってことで、さらに調べてみました。
結論としては--no-reset
フラグを立ててappiumを起動すると最後のclean upをしないようになるみたい。
いやーやっとこれでテスト自体を書いて行けます。道のりが長かった( ;´Д`)
その他、色々メモ
Appiumを使うにはアプリをビルドしておく必要があります。(テスト実行時にアプリのパスを指定する)
ビルドにはxcodebuild
コマンドを使って行いますが、コマンドからだとうまくビルドできなかったのでメモ。
出ていたエラー
clang: error: invalid architecture 'arm' for deployment target '-mios-simulator-version-min=5.0'
最終的にはこちらの記事を見て引数を変えてみたら動きました。
引数に指定したのは以下↓
xcodebuild \
-project "any.xcodeproj/" \
-target ANY_TARGET \
-sdk iphonesimulator7.1 \
-arch i386 \
-configuration Debug \
VALID_ARCHS="armv6 armv7 i386" \
ONLY_ACTIVE_ARCH=NO \
TARGETED_DEVICE_FAMILY="1" \
clean install