AppiumとSelenium WebDriverを使ってiOSシミュレータ上のSafariで自動テストしてみた
Selenium WebDriver を使って iPad 用 Safari の自動テストができないかと思い Appium という iOS/Android アプリのテストを自動化するツールを試してみた。ただ色々と罠が多くてハマる。
なお、開発環境は Mac の VirtualBox 上に構築しており、RSpec で Selenium WebDriver を使用。Mac 側の Appium に接続し iOS シミュレータ上の Safari でテストするという形式。
まず、Appium は GUI で操作できるアプリ形式のパッケージも提供されているが、結局 Node.js が必要になるので公式サイトのガイド通り node の npm で入れた。
$ brew install node $ npm install -g appium $ npm install wd $ appium
これで appium がローカルホストの 4723 番ポートで待ち受ける状態になる。
なお Mac OS X で Appium を使う場合、「appium/docs/en/running-on-osx.md at master · appium/appium」にあるように appium コマンドを実行する前に、
$ sudo authorize_ios
を実行しておく必要がある。Appium をパッケージで入れた場合は別途ダイアログが出るので必要なし。
あとは以下のようなコードを書けば Selenium WebDriver で iOS シミュレータを起動できる。
url = 'http://127.0.0.1:4723/wd/hub' caps = { 'platformName' => 'iOS', 'deviceName' => 'iPad Simulator', 'platformVersion' => '7.1', 'browserName' => 'safari', } ipad_driver = Selenium::WebDriver.for :remote, :url => url, :desired_capabilities => caps
desired_capabilities に指定できるオプションは以下を参照。
» appium/docs/en/caps.md at master · appium/appium
これでひとまず正常にテストを実行できた。
ちなみにパッケージでインストールした Node.js は使用できない。appium を起動する際にパーミッション周りでエラーになり、sudo で実行しようとすると sudo 使うなと怒られ、 Homebrew 等で node をインストールし直しなさいと言われる。
また、どういった条件かは分からないが頻繁に「App をインストールできませんでした。」というダイアログが出て MobileSafari が起動しなくなることがあった。起動しないばかりかシミュレータ上から MobileSafari が消えてしまう。
Xcode をインストールし直しても元に戻らず、調べまくった結果以下のディレクトリの中身を一旦削除してから Appium を起動し直せば OK ということが分かった。
~/Library/Application Support/iPhone Simulator/[device_version]/Applications
» iOS 7 Simulator Msg: iOS Simulator Failed To Install The Application – Google グループ
それから「[iOS] Appiumを試したメモ – 起動させるまでの道のり – Qiita」にあるように「–no-reset」オプションをつけずに appium を実行すると、テスト終了時にシミュレータ上のアプリケーションを削除してしまうらしい。個人的には関係なかったが。
ちなみに Appium 以外に「ios-driver」という選択肢もある。こっちもハマっててまだうまく実行できていない。
コメントを残す