テスト自動化(10)ChromeDriver

QUES TECH

googledriver

皆さん こんにちは

WebアプリをAndroid端末でテストする時、ブラウザは何をお使いですか?
Android 4.2系以降Chromeが標準で搭載されるようになりましたが、まだまだ、標準ブラウザが主流のようです。
最近、Andorid 5系のLolipopにバージョンアップできる機種もやっと増えてきた事によって、今後Chromeの比率も高くなるのではないのでしょうか?

スマホの自動テストと言えばAppiumですが、今回は、「ChromeDriver」で、お手軽!にChrome for Androidのテスト自動化環境を構築する方法についてです。

環境

  • PC : MAX OSX 10.9.5
  • Java 1.7
  • ChromeDriver 2.15 (MAC用)
  • Selenium 2.45
  • 端末 : Android Nexus 5

実機でテストします。

手順
①AndroidとPC側の設定
・Androidを接続する
 AndroidをデバックモードでPCに接続し、ターミナルでデバイスが接続されていることを確認する。

adb devices

・chromedriverを起動する
 chromedriverを保存しているディレクトリに移動し、ターミナルで以下を実行する。

./chromedriver --whitelisted-ips --url-base=wd/hub

※–whitelisted-ips : Androidを接続したPC以外からテストスクリプトを実行する場合。
※–url-base=wd/hub : 接続するベースURLに付加する場合。

②実際に実行するソースの作成・実行(Java)

public class TestAndroidChrome {

    public static void main(String[] args) throws InterruptedException, MalformedURLException {
        // TODO Auto-generated method stub

        DesiredCapabilities capability;
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setExperimentalOption("androidPackage", "com.android.chrome");
        capability = new DesiredCapabilities();
        capability.setCapability(ChromeOptions.CAPABILITY,chromeOptions);
        WebDriver driver = new RemoteWebDriver(new URL("http://localhost:9515/wd/hub"), capability);
        driver.get("http://www.google.co.jp");
        Thread.sleep(2000);
        WebElement searchBox = driver.findElement(By.name("q"));
        searchBox.sendKeys("ChromeDriver");
        searchBox.submit();
        Thread.sleep(5000);
        driver.quit();

    }

}

ソースを実行すると、AndroidのChromeが立ち上がり、自動実行される。
※Androidに入っているChromeのVersionが古いと、Chromeの画面だけは立ち上がるが、動かないことがあるので注意。
※8行目:Chrome for Androidを指定。
※11行目:他のPCに繋いだ端末へテストする場合、IPを書き換えてください。
上記以外のテストコードは、Appiumや、Selendoroid等で利用していたソースがそのまま使えます。

ChromeDriverは、更新頻度も高く動かなくなると言うこともほぼありませんし、先行バージョン(Beta等)にも対応しています。
さらに、なんと言ってもダウンロードして起動するだけで環境ができるというお手軽さは、他のOSSにはないと思いました。

AndroidでWebアプリのテスト自動化するなら、ChromeDriverを使ってみてはいかがでしょうか。