garbagetown

個人の日記です

FluentLenium

この記事は Selenium Advent Calendar 2013 - Adventar の四日目です。

Selenium について

みなさんご存知のとおり Selenium は Web ブラウザの操作を自動化するツールです。

2006 年頃にセンセーショナルに登場しましたが、当時の SeleniumJavaScript で強引にブラウザを操作していたため、JavaScript のセキュリティ制約に大きく影響されるなど、なかなか思い通りに利用することができず、爆発的に普及することはありませんでした。手作業による画面操作、キャプチャ取得に疲弊し切っていたテスト要員たちの期待がとても大きかっただけに、少なくない数の人たちが騙されたと感じていたように思います。

そんな Selenium ですが、2011 年に WebDriver を統合して Selenium2 となり、ブラウザをネイティブに操作できるようになりました。Jenkins との連携や Selenium Grid など、自動実行、負荷分散等の仕組みも整い、いよいよ本格的に利用できる状況になってきていると言えます。

Selenium2 の簡単な紹介、インストール手順や Jenkins との連携手順は、弊社のエンジニアが執筆を担当している CodeZine の下記連載をご覧ください(ステマ)。

Selenium IDE について

上記連載でも紹介していますが、Selenium と併せて紹介されることが多いのが Selenium IDE という Firefox 拡張です。ブラウザの操作を記録し、再生することができる他、JavaRuby, Python のテストコードとしてエクスポートすることもできます。

とても簡単に利用できるので Selenium の紹介記事には必ず登場するのですが、Selenium IDE がエクスポートするテストコードは画面仕様と強く結合しており、画面仕様が変わるたびにテストコードも修正しなければなりません。このために Selenium はテストコードのメンテナンスコストが高過ぎるという印象を持たれることが少なくなく、普及の妨げになってしまったようにも思います。

同様のツールとして Selenium Builder も開発されていますが、以上の通り濫用は禁物です。

この問題は Page Object パターン を用いて解決することができます。上記 CodeZine の連載にも、間もなく私が執筆した PageObject パターンに関する記事が公開されますので、興味のある方は是非ご覧になり、はてブやツイート、いいね!などをよろしくお願いいたします(ステマ)。

2013/12/13 15:00 追記
公開されました。はてブやツイート、いいね!などをよろしくお願いいたします(ステマ)

FluentLenium

ステマな前置きが長くなりましたが、以上の通り Selenium を効果的に利用するには、ある程度の知識や工夫が必要です。これをライブラリとして提供してくれるのが FluentLenium です。

jQuery ライクなセレクタや流れるインタフェース、PageObject パターンのサポートなどが便利なライブラリなのですが、偶然にも Java Advent Calendar 2013 - Adventar三日目 とカブってしまったので、さらっと情報源だけまとめておきます。

以下は FluentLenium の開発者でもあるフランス娘 MathildeLemee さんのスライド。

マチルダたんの麗しきお顔とお声はこちら。フランス語なのでさっぱり分かりません。

Playframework2 には FluentLenium が組み込まれており、ラッパー API が提供されています。Play2 で FluentLenium を使うスクリーンキャストなんかもあります。こちらは英語。

まとめ

マルチブラウザサポートが当たり前になり、タブレットやスマートフォンのサポートも視野に入れていかなければならない昨今、ブラウザ自動テストの必要性は日々高まる一方です。

Selenium は歴史的な背景から混乱と失望の道を歩んできましたが、Selenium2 になり現実的な解決策となりました。また、2013 年のクリスマスにはモバイルのサポートを強化した Selenium 3 のリリースも予定されています。

Selenium2/3 を PageObject パターンや FlunetLenium などと共に正しく活用してブラウザテストを効率化し、浮いた時間は次の地獄と思われる JavaScript フレームワークやテストに費やしましょう。

最後まで読んで頂きありがとうございました。五日目は nkns165 さんです!