読者です 読者をやめる 読者になる 読者になる

Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

AndroidDriverが非推奨になってました

Selenium Selendroid

間藤です。

前のエントリーでも書いたように、AndroidDriverが非推奨になったようです。以前は、Javaで実装されたSelenium ClientにAndroidDriverというクラスが存在したのですが、v2.39.0で削除されたそうです。(7/2時点の最新はv2.42.2)

v2.39.0
=======
WebDriver:
* Update to support native events for Firefox 26.
* Removed server side of iPhone Selenium Client & WebDriverdriver.
* Removed server-side of AndroidDriver and deprecating client side.

その代りにSelendroidを使いましょうとなってました。この指摘に素直に従って試しに使ってみましたので、以下に簡単にメモしておきます。

Getting started with Selendroid

Getting startedの記述に従って進めていけばよいのですが、なるべく最短で動作確認まで到達できるよう書いていきます。

システム要件

MacLinuxWindowsのいずれでも利用可能です。今回私はWindows8.1(64bit)で確認しています。
Java SDK(1.6以上)が必要です。また、JAVA_HOME環境変数JREのパスを設定しておく必要があります。また、Android SDKのパスをANDROID_HOME環境変数に設定する必要もあります。
64bit Linuxを利用している場合は、ia32-libsのインストールが必要です。
エミュレータ/実機での自動テストが可能ですが、今回私は実機(Nexus10)で確認しています。

サンプルアプリ

すぐにSelendroidの動作確認が出来るよう、サンプルアプリが提供されています。
Getting startedのページにもダウンロードのリンクがありますが、こちらのページからもダウンロードできます。(selendroid-test-app)
これをダウンロードして使います。

Selendroidの起動

以降でJavaのテストを作成/実行しますが、Selendroidのサーバを経由して実機へのアプリインストールや、アプリの自動操作を行います。以前に紹介したAppiumとそこは同じです。

f:id:IntelligentTechnology:20140702173139p:plain

まず、以下のページからselendroid-standaloneをダウンロードします。(前述のリンクと同じページ)

http://search.maven.org/#search|ga|1|selendroid

f:id:IntelligentTechnology:20140702143018p:plain

ダウンロードしたファイルと、先ほどダウンロードしたサンプルアプリを同じディレクトリに配置して、以下のコマンドを実行します。

> java -jar selendroid-standalone-0.10.0-with-dependencies.jar -app selendroid-test-app-0.10.0.apk

起動したサーバのステータスを確認するには、以下のURLにアクセスします。

http://localhost:4444/wd/hub/status

正常に起動していれば、JSONが返されるはずです。

実機の接続

Selendroidのサーバを起動したPCに実機を接続します。そうすると、サーバのコンソールに以下のようなログが出力されます。

7 01, 2014 2:23:23 午後 io.selendroid.server.model.DeviceStore addDevice
情報: Adding: HardwareDevice [serial=R12E213A5XT, model=Nexus 10, targetVersion=ANDROID19]

サーバを起動する前に実機を接続していても何ら問題はありません。

テストの作成

「Getting started」のページに記載されているサンプルを参考にしてテストを作成します。
私が作成したテストはこちら。


SelendroidTest.java

SelendroidCapabilitiesのコンストラクタに渡している文字列でテスト対象のアプリを指定しています。ここに指定できる文字列は、上の手順でサーバのステータスを確認したときに返されるJSONで確認することができます。以下は抜粋です。

{
    "appId": "io.selendroid.testapp:0.10.0", 
    "basePackage": "io.selendroid.testapp", 
    "mainActivity": "io.selendroid.testapp.HomeScreenActivity"
}, 

これを実行すると、実機にサンプルアプリがインストールされ、アプリのテストが実行されます。
なお、Eclipseで実行するなら以下のようにビルドパスを設定してください。(selendroid-clientも同様にダウンロードしてください)

f:id:IntelligentTechnology:20140702153218p:plain

AndroidDriverの代替

ここまででサンプルアプリのテストの手順は確認できました。
AndroidDriverでは、android-serverというWebViewを持ったアプリで、Webページの自動テストを行うことができました。Selendroidで同じことを実現する場合、android-driver-appを利用します。このアプリも前出のリンクからダウンロードすることができますが、特にダウンロードしなくてもSelendroidのサーバがデフォルトでこのアプリをインストール/実行してくれるようです。

わかりにくいと思いますので、実際の手順を以下に示します。

Selendroidの起動

以下のようにしてSelendroidを起動します。先ほどは指定していた対象アプリのオプションが不要となります。

> java -jar selendroid-standalone-0.10.0-with-dependencies.jar

テストの作成

これも公式サイトのサンプルをベースに作成します。
私が作成したテストはこちら

ポイントは、SelendroidCapabilitiesのインスタンス生成です。

DesiredCapabilities caps = SelendroidCapabilities.android();

先ほどは、テスト対象アプリを指定していましたが、それが不要となります。
これでテストを実行すると、android-serverアプリが起動して、このアプリの中のWebViewでWebページのテストを行うことができます。

なお、SelendroidLauncherクラスを利用すると、Selendroidのサーバを事前に起動する必要がなくなります。

    private SelendroidLauncher selendroidServer = null;
・・・
    SelendroidConfiguration config = new SelendroidConfiguration();

    selendroidServer = new SelendroidLauncher(config);
    selendroidServer.launchSelendroid();

このパターンのサンプルはこちらです。