Seleniumのモバイルテストは今どうなっているのか
スマートフォンの普及に伴い、インターネットの利用はデスクトップからモバイルにシフトしており、最近の調査ではスマートフォンからのアクセスがパソコンを上回るウェブサイトも増えています。
Seleniumでもこのモバイルへの対応が重要なテーマになっており、 Seleniumプロジェクトやその周辺プロジェクトにおいて、既に様々なツールがリリースされています。
今日は、このSeleniumによるモバイルテストの現状についてご紹介します。
iPhoneDriverとAndroidDriver
Seleniumプロジェクトのモバイルへの対応はかなり早くから始まっており、2009年2月にはiOS(iPhoneおよびiPad)のブラウザテストを行うiPhoneDriver※1が 、2010年6月にはAndroidのブラウザテストを行うAndroidDriverがリリースされています※2。(ちなみにSelenium 2がリリースされたのが2011年7月です)
iPhoneDriverとAndroidDriverはブラウザを直接操作するのではなく、WebView(アプリの内部にウェブページを表示するUI部品)を埋め込んだ専用アプリを端末にインストールし、WebView上のウェブページでブラウザテストを行っていました。(図1)
NativeDriver
AndroidDriverがリリースされてから1年ほどたった2011年6月、AndroidとiOSのネイティブアプリのテストツールNativeDriverが、Seleniumプロジェクトの外部でGoogleからリリースされました。※3
NativeDriverが特徴的だったのは、SeleniumのWebDriver APIを拡張したコマンド体系によりテストを記述できる点でした。
NativeDriverでテストを行うには、テスト対象のアプリにNativeDriverのライブラリを埋め込んでコンパイルしておく必要がありました。テスト実行時には、このライブラリが外部とHTTP通信を行い、画面情報のやりとりや画面操作を行っていました。※4(図2)
NativeDriverは期待されたプロジェクトでしたが、Google Codeの公開レポジトリにコミットが行われたのは結局5ヶ月程で、2012年3月には残念ながら開発も終了してしまいました。※5
ios-driver、Selendroid、Appium
NativeDriverプロジェクトが終了した後、WebDriverのAPIを使ってWebページとネイティブアプリの両方のテストを可能にするプロジェクトが、 Seleniumプロジェクトの外部でいくつか登場しました。それがios-driver、Selendroid、そしてAppiumです。
これらのツールは、内部的にiOSやAndroid付属の標準テストツールを利用して実装されており※6 、テスト対象のアプリに何かを埋め込む必要はありません。
3つのプロジェクトはいずれも、現在も活発に開発が進められています。
ios-driver
ios-driverはiOS向けのテストツールで、François Reynaud氏が中心となって開発が進められています。
利用する際は、次の点に注意が必要です。(バージョン0.65時点)
- iOSシミュレータ上のみで動作します。実機上での動作には次バージョンで対応予定のようです。※7
Selendroid
SelendroidはAndroid向けのテストツールで、Dominik Dary氏が中心となって開発が進められています。ios-driver、SelendroidプロジェクトのトップページにはともにeBay社のロゴが表示されており、ともにeBayの開発者が中心となって開発が進められているようです。
利用する際は、次の点に注意が必要です。(バージョン0.9.0時点)
- Webページのテストは、実際のブラウザではなく、WebViewを埋め込んだ専用のアプリを使って行います。
Appium
AppiumはiOS、Android向けのテストツールで、Sauce Labs社のJonathan Lipps氏が中心となって開発が進められています。
Appiumコミュニティの参加者は1471人と、ios-driverコミュニティの61人、Selendroidコミュニティの139人と比較しても非常に規模が大きくなっています※8。本家Seleniumユーザーコミュニティの15846人※9と比べると10分の1ですが、にも関わらず直近の投稿数はSeleniumユーザーコミュニティをしのぐ程になっています。機能追加やバグ修正も活発で、バージョンナンバーはこれまで0.xxでしたが、間もなくバージョン1.0のリリースが見込まれています。
利用する際は、次の点に注意が必要です。(バージョン1.0.0-beta.2時点)
- Android 4.3以前のブラウザテストは、モバイルのChromeを使って行います※10 。Android 4.4以降はAndroidのデフォルトブラウザも利用可能です。
- Android 4.1以前のネイティブアプリをテストする場合、その再生ロジックは内部的にSelendroidを使って実装されており、微妙に挙動が異なることがあります。※11
- iOSの実機上でのブラウザテストはSafariで行えますが、セキュリティの制約上Alertダイアログの操作などができません。※12
- バージョン1.0では、いくつかの非推奨APIが廃止されるようです。
Selenium 3
様々な外部プロジェクトの活発化を受け、Seleniumプロジェクトでもこれらを取り込む動きが始まりました。
目標としたのは、ios-driver、Selendroid、Appiumのコマンドに互換性を持たせ、各ツールを同じコマンド体系で利用可能にすることであり、これこそがSeleniumの次期バージョンSelenium 3の主要な目標の1つです。
これが実現されれば、デスクトップのSeleniumテストにおいてブラウザを簡単に切り換えられるように、モバイルでもios-driver、Selendroid、Appiumを必要に応じて簡単に使い分けることが可能になります。
このようなプロジェクトの状況を受け、あまり改善が進んでいなかった公式プロジェクトのiPhoneDriver、AndroidDriverはメンテナンス終了となりました※13 。これはつまり、SeleniumプロジェクトはモバイルSeleniumのコマンド体系の整備に注力し、そのコマンドの実装は外部プロジェクトに委ねるということを意味します。
Seleniumプロジェクトでは現在、モバイルテストにはios-driver、Selendroid、Appiumのいずれかを利用することが推奨されています。
その他のモバイル端末
iOS、Android以外のモバイル端末への対応状況についても簡単に見ておきましょう。
Windows Phone
Windows Phone Web Driverを利用できます。Selenium公式サイトのダウンロードページからもリンクが張られています。
Firefox OS
AppiumがFirefox OSをサポートしています。内部的には、Firefox OSに実装されたWebDriverの機能を使用しているようです。※14
BlackBerry
BlackBerryにWebDriverのエンジンが埋め込まれているため、これを使用できます。Selenium公式サイトのダウンロードページからもリンクが張られています。
注釈・出典
- iPhoneDriverのコードの最初のコミット
- AndroidとiOSのサポート
- iOSに対応したのは2011年8月です。
- NativeDriver_introduction.pdf
- Winding down NativeDriver
- ios-driverはUI Automationを、SelendroidはInstrumentationを、AppiumはUI Automationとuiautomatorを利用して実装されています。
- Real Device vs. Simulator
- いずれも2014年4月30日時点
- 2014年4月30日時点
- Androidエミュレータ上でブラウザテストを行う場合、エミュレータにChromeをインストールする作業が非常に面倒です。
- 筆者の手元では、ハイブリッドアプリ(ネイティブアプリの内部でWebViewを使ってHTMLを表示しているアプリ)のテストもSelendroidを利用しないとうまく動作しませんでした。「Android Support」によれば、Android 4.4以上ならSelendroidを利用しなくてもよいはずなのですが。。
- 「how to handle alert box while automating web view (appium hangs)」の、2005/10/12のJonathan Lipps氏の投稿。 iOSシミュレータを使う、またはAppium付属のアプリWebViewAppを使うことで、セキュリティ制約の問題は回避できます。
- AndroidとiOSのサポート
- Sauce Labs のAppium がAndroid と Firefox OSアプリをテストできるようになった