ProtractorとAppiumでiOSシミュレータのブラウザを対象にE2Eテストを実行する

こんにちは。リバウンドのせいでこの季節、Tシャツを着たくないkitakです。

今日はiOSシミュレータのブラウザを対象にE2Eテストを実行する方法を紹介します。

モバイルアプリの操作の自動化には今どきはAppiumというツールが人気があるそうなので、これを使うことにしました。 E2EのテストランナーにはProtractorを使います。Protractor自体はSelenium2(WebDriver)をラップしたツールなので、Seleniumを直接使う、あるいは他のSelenium2をラップしたテストランナーを使う場合でも、この記事の内容は参考になると思います。

Appiumのインストール

Protractorのドキュメントを参考にしました (refs: protractor/mobile-setup.md at master · angular/protractor · GitHub )

npm install -g appium
appium-doctor # iOS, Androidの環境・ツールが用意されているかどうか検証するコマンド
authorize_ios # appiumがiOSシミュレータにアクセスするための権限を得る

Appiumは、この記事で紹介したnpmパッケージとしてインストールする以外にも公式サイトからMacアプリのパッケージをダウンロードしてインストールする方法もあります。

Appiumサーバの起動とProtractorの設定

Appiumのサーバの起動はappiumコマンドを叩くだけです。 Appiumサーバはjson wire protocolで通信をおこなうので、Appiumサーバ ≒ WebDriverのリモートサーバです。

Protractorの設定ファイルは以下のようになります。 seleniumAddressプロパティで指定してるURLのホストはAppiumサーバです。 capabilitiesには、シミュレータで立ちあげたいブラウザを指定します。

exports.config = {
  seleniumAddress: 'http://localhost:4723/wd/hub',
  capabilities: {
    'browserName': 'safari',
    'appium-version': '1.0',
    platformName: 'iOS',
    platformVersion: '8.3',
    deviceName: 'iPhone Simulator'
  }
  // その他設定が続く...
}

あとは設定ファイルを指定してProtractorコマンドを叩くだけです。

protractor config.js