こんばんは、ころすけ(@wg_koro)です。
WebアプリをAndroid実機でテストするのって面倒くさいですよね!どうにかならないかなー・・・ってSelenium使えばいいんじゃね?
やってみたら案外すんなりできたのでご紹介。スクリーンキャプチャも撮れた。なかなかイイ。
あ、Selenium WebdriverはJava, C#, Python, Rubyで操作できます。今回、自分はPythonで操作しました。
自動操縦までの手順
- Android SDKのインストール (adbコマンドを使えるようにする)
- AndroidへSelenium Serverをインストールする
- スクリプトでゴリゴリ操作する
Android SDKのインストール
実はこれが一番面倒くさい。けど、adbコマンドは必須なので頑張って入れましょう。インストール手順は下記サイトが参考になります。
AndroidSDKのインストール方法/adb環境の構築 | 極 Nexus7 |
AndroidへSelenium Serverをインストールする
下記からAndroid用APK(android-server-2.21.0.apk)をダウンロードします。
Downloads – selenium – Browser automation framework – Google Project Hosting
AndroidのUSBデバッグにチェックを入れ、PCと実機をUSBケーブルで接続します。USBデバッグはメニュー→設定→開発者向けオプションの中にあるはずです。
APKインストールには実機ID(device ID)が必要なので、まずはそれを取得します。IDは下記コマンドで取得できます。
adb devices
[/shell]
次にAPKを実機にインストールします。
adb -s 実機ID -e install -r android-server
[/shell]
インストールしたら、APKを待機状態にします。これを実施しないと外部からスクリプトを受け付けてくれません。
adb -s 実機ID shell am start -a android.intent.action.MAIN -n org.openqa.selenium.android.app/.MainActivity -e debug true
adb -s 実機ID forward tcp:8080 tcp:8080
[/shell]
ここまで実行して成功していれば、Android側は↓のように画面が真っ白になり、操作受付状態になっているはずです。※各画像はクリックで拡大できます
スクリプトで操作する
あとは簡単。Selenium Webdriverを操作するスクリプトを書けば動きます。書き方はIEDriverやFirefoxDriverと同じです。
あ、違う点が1つあった。AndroidDriverの場合、webdriverの接続は下記のように書きます。
browser = webdriver.Remote(command_executor=’http://localhost:8080/wd/hub’, desired_capabilities=webdriver.DesiredCapabilities.ANDROID)
# この書き方じゃないので注意。
# browser = webdriver.Android()
[/python]
スクリーンキャプチャーを撮る場合はこんな感じ。
browser.get_screenshot_as_file(os.path.join(self._current, ‘test.png’))
[/python]
javascriptも実行可能。生js書けます。
browser.execute_script(‘alert(document.title);’)
[/python]
下記の操作を自動実行するスクリプトをGistsに置きました。参考にドウゾ。
- Google.co.jpを開く
- 検索ボックスに「Azrael」と入力させる
- 検索を実行する
- 検索結果画面でスクリーンキャプチャーを撮る
- ページのタイトルをjsでAlert表示させる
Android + Selenium2 Example (Gists)
Python版Seleniumのドキュメント
これで実機テストはかなり楽になるかもっ・・・っ!!
わかりやすいので助かりました。
並列実行の方法とかも知りたかった・・・(‘A`)ヴァー
大変興味深かったです。
androidの端末がいくつもあり全端末でのテストを求められているのですが、これを使ってうまくできればなと思っています。
ただ、端末数が多いので、、、都度PCと接続するのではなく、端末単体でテストを実行することは可能でしょうか。
また、その際にどこかのサーバにおいたテストを端末が取得しセルフテストすることは可能でしょうか。
お時間あるときにお返事いただけると幸いです。
よろしくお願いします。
こんばんは。
Androidの他機種テストは頭痛の種ですよね…。
残念ながら中央集権型のテストは現状、存在していないようです。
無理矢理やるとすれば、複数台をPCにつなげてデバイスIDを分けてコマンド打ち込むくらいでしょうか。
ある程度人力でもよいならば、AdobeのEdgeシリーズを使うという手もあります。
http://html.adobe.com/jp/edge/inspect/
複数台の端末を同時に動かせるツールです。
人がPCブラウザを操作する必要があります。
PCブラウザを操作すると、各端末はPCブラウザの操作と同じ動きをします。
本当、複数端末でのテストがもっと便利になってほしいものですねぇ・・・。