最近の大きな変化
では、最新事情のご紹介に移りましょう。本記事では特に、次の3つの大きな変化に着目していきます。
- W3CによるWebDriverの標準規格化
- Appiumの適用範囲の拡大
- 有用な拡張・支援ソフトウェアの普及
W3CによるWebDriverの標準規格化
Seleniumの一部であったWebDriverが、W3Cの規格となり、Webブラウザまたはブラウザに付帯するツール(以下では「ブラウザドライバ」と呼びます)により実現すべき標準インターフェースとなりつつあります。標準化されることで、WebDriverへの対応はSeleniumプロジェクトの責務ではなく各Webブラウザベンダの責務であることが明確になります。これにより、今後のWebブラウザの更新に対するブラウザドライバ等の追従がよりスムーズになり、引いては動作環境の堅牢化につながると期待できます。
W3Cにおける標準規格の承認プロセスは4段階あり、WebDriverは現在、草稿に対するレビューが済み大筋が決まった第2段階の「勧告候補(Candidate Recommendation)」に進んでいます(2017年7月現在)。最初に草稿が公開されたのは2012年7月ですから、長い時間をかけた地道な努力の末に標準化されているのがわかります。
この取り組みと足並みを揃えるように、最新バージョンのSelenium 3ではWebDriver APIのみが残り、Selenium CoreのようなレガシーAPIはオプションとして再構成・分離されました。
また、これまでオープンソースで開発されてきた各種ブラウザドライバの一部においては、SafariDriverやEdgeDriverなどブラウザベンダによるプロプライエタリなものに置き換わり、Webブラウザの新バージョンにおける動作をベンダが保証するようになったりもしています。
Appiumの適用範囲の拡大
Appiumは本来、iOSやAndroidのようなモバイルプラットフォーム用のアプリ自動操作のためのものとして開発されていました。しかし、2016年公開のAppium 1.6で対応が発表されたプラットフォームは様子が異なり、Windowsネイティブアプリ向けドライバの「WinAppDriver」や、映像配信STB向けのミドルウェアである「You.i TV」向けのドライバなど、これまでに無い範囲への対応もコミュニティへ供与されました。
この動きは一過性のものではなく、今後、このようにWebDriverプロトコルを応用して広範囲のプラットフォームの自動操作に対応していく流れが拡大し続けるものとみられます。2016年のワールドカンファレンス「SeleniumConf UK 2016」では、AppiumプロジェクトのJonathan Lippsの講演で「StarDriver」構想が発表されました。これは、標準化されたWebDriverプロトコルを用いてあらゆるプラットフォームで自動化を実現するという壮大な構想です。前記のWinAppDriverやYou.i TV向けの対応は、この構想の一環として捉えられています。
一方、今のままさまざまなプラットフォーム向けのドライバがAppiumに組み込まれ続けると、Appium自体の開発プロジェクトは非常に重く・鈍いものとなってしまうであろうことは想像に難くありません。
さらに次期バージョンとなるAppium 2の構想について、まさに今、公式フォーラムを中心に議論が進められており、StarDriver構想を無理なく推し進めるための仕様変更がなされる見込みです。詳細は、本連載で予定されているモバイル対応の回にて解説されます。たぶん解説されると思う。解説されるんじゃないかな。
有用な拡張・支援ソフトウェアの普及
Selenium 2から含まれているWebDriverがよく使われるようになるにつれ、特にE2Eテスト向けに特化したWebDriverのラッパーが発展してきました。これらはSeleniumの元のAPIを利用するのに比べて、よりDSL的に簡潔でわかりやすいコードが書けたり、Ajax処理を使ったページなどのSeleniumではまりやすいポイントに対応しやすかったり、といったような優れた特徴を持っています。
もし、これから自動テスト向けにSeleniumを扱うのでしたら、次のようなラッパーを積極的に利用していくべきでしょう(もちろん、ラッパーの中身であるSeleniumについては、基礎として学んでおいた方が良いでしょう)。
Java/Java互換言語
-
Selenide
- UIテスト向けに特化したラッパーです。
-
Geb
- Groovyでブラウザの自動操作コードを簡潔に書くためのパワフルなラッパーです。
-
FluentLenium
- 薄めのラッパーです。
Ruby
-
Capybara
- E2Eテストフレームワークです。WebDriver以外のドライバも利用できます。
JavaScript
-
Protractor
- AngularJSを利用したアプリケーション用のE2Eテストフレームワークです。
-
Nightwatch.js
- Node.js上で動くE2Eテストフレームワークです。
PHP
-
Codeception
- 単体テストからE2Eテストまでサポートするテストフレームワークです。
Seleniumを利用するうえでは実行環境の構築・維持にもなかなか手間がかかるものですが、これを簡単に利用できるよう支援する仕組みもさまざまに発展しています。
E2Eテスト向けに実行環境を簡便に提供する仕組みとしては、次のようなサービスやソフトウェアの利用実績が高くなってきています。
- Sauce Labs
- BrowserStack
- AWS Device Farm
- STF(Smartphone Test Farm)
SeleniumプロジェクトではSelenium ServerのDockerイメージ「docker-selenium」も公開しており、これを活用して実行環境を効率的に構築する事例も増えてきています。詳細は、本連載で予定されているDocker対応の回にて解説される予定です。この他、CircleCIなどCIサービスでのSelenium実行のサポートや、スクリーンショットの検査に特化した自動テストサービスのApplitoolsなど、さまざまな拡張・支援が普及し始めています。Seleniumの導入・運用における敷居は、以前に比べるとずいぶんと低くなったのではないでしょうか。