SeleniumとPythonを使ってAndroidを自動テスト

こんばんは、ころすけ(@wg_koro)です。

Android

WebアプリをAndroid実機でテストするのって面倒くさいですよね!どうにかならないかなー・・・ってSelenium使えばいいんじゃね?

やってみたら案外すんなりできたのでご紹介。スクリーンキャプチャも撮れた。なかなかイイ。

あ、Selenium WebdriverはJava, C#, Python, Rubyで操作できます。今回、自分はPythonで操作しました。

自動操縦までの手順

  1. Android SDKのインストール (adbコマンドを使えるようにする)
  2. AndroidへSelenium Serverをインストールする
  3. スクリプトでゴリゴリ操作する

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デバッグはメニュー→設定→開発者向けオプションの中にあるはずです。
USBデバッグオン

APKインストールには実機ID(device ID)が必要なので、まずはそれを取得します。IDは下記コマンドで取得できます。

[shell]
adb devices
[/shell]

実機IDが表示されるので、それをメモしておきます。
deviceID表示

次にAPKを実機にインストールします。

[shell]
adb -s 実機ID -e install -r android-server
[/shell]

下記のようにSuccessと表示されたら成功です。
インストール

インストールしたら、APKを待機状態にします。これを実施しないと外部からスクリプトを受け付けてくれません。

[shell]
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の接続は下記のように書きます。

[python]
browser = webdriver.Remote(command_executor=’http://localhost:8080/wd/hub’, desired_capabilities=webdriver.DesiredCapabilities.ANDROID)

# この書き方じゃないので注意。
# browser = webdriver.Android()
[/python]

スクリーンキャプチャーを撮る場合はこんな感じ。

[python]
browser.get_screenshot_as_file(os.path.join(self._current, ‘test.png’))
[/python]

ページ全体をキャプチャーできちゃう!※クリックで拡大
キャプチャーした検索結果

javascriptも実行可能。生js書けます。

[python]
browser.execute_script(‘alert(document.title);’)
[/python]

実行結果↓
js実行後

下記の操作を自動実行するスクリプトをGistsに置きました。参考にドウゾ。

  1. Google.co.jpを開く
  2. 検索ボックスに「Azrael」と入力させる
  3. 検索を実行する
  4. 検索結果画面でスクリーンキャプチャーを撮る
  5. ページのタイトルをjsでAlert表示させる

Android + Selenium2 Example (Gists)
Python版Seleniumのドキュメント

これで実機テストはかなり楽になるかもっ・・・っ!!

3件のコメント

  1. わかりやすいので助かりました。
    並列実行の方法とかも知りたかった・・・(‘A`)ヴァー

  2. 大変興味深かったです。

    androidの端末がいくつもあり全端末でのテストを求められているのですが、これを使ってうまくできればなと思っています。

    ただ、端末数が多いので、、、都度PCと接続するのではなく、端末単体でテストを実行することは可能でしょうか。
    また、その際にどこかのサーバにおいたテストを端末が取得しセルフテストすることは可能でしょうか。

    お時間あるときにお返事いただけると幸いです。
    よろしくお願いします。

  3. こんばんは。
    Androidの他機種テストは頭痛の種ですよね…。

    残念ながら中央集権型のテストは現状、存在していないようです。
    無理矢理やるとすれば、複数台をPCにつなげてデバイスIDを分けてコマンド打ち込むくらいでしょうか。

    ある程度人力でもよいならば、AdobeのEdgeシリーズを使うという手もあります。
    http://html.adobe.com/jp/edge/inspect/
    複数台の端末を同時に動かせるツールです。
    人がPCブラウザを操作する必要があります。
    PCブラウザを操作すると、各端末はPCブラウザの操作と同じ動きをします。

    本当、複数端末でのテストがもっと便利になってほしいものですねぇ・・・。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください