読者です 読者をやめる 読者になる 読者になる

社内勉強会で Selenium2 WebDriver と Spock と Geb の話をしました

Geb面白いなーってつぶやきながら勉強してたら。
玉川さんが玉川さんを紹介してくれて。

ふむ。

りゅーじさんがひろこさんを紹介してくれて。
ひろこさんをお招きして社内Geb勉強会を開催しました。

ひろこさんのセッションを聞けて幸せなひとときでした。

  • ひろこさん。すごく分かりやすかったです!ありがとうございます!
  • りゅーじさん。ご紹介ありがとうございます!
  • さとりゅ。おぎおぎ。色々調整等ありがとー!
  • 日本全国とあと中国もつないでたかな?見に来てくれたみんなありがとー!

僕は。実際のプロジェクトでGeb使ってみた話を実際のコードを見せながらお話しました。
コードは見せられないけど流れはこんな感じ。

スパゲッティパターン

レニウムで自動テストしようぜー!って言って、まず踏むのがこのパターンすね。
findElementとかでXPath使ったりしてもう何テストしてるかわかんないし、DOMに変更あったら真っ赤になるしで。メンテナンスナイトメアな感じ。すぐ腐るすね。

If you have WebDriver APIs in your test methods, You're Doing It Wrong. -- Simon Stewart.

ページオブジェクトパターン

てことで、ページオブジェクトパターンですよ!

スッキリするすねー。ページからページヘの遷移がメソッドチェーンできるのが好き。
あと、WebDriverのPageObjectサポートが素敵で。アノテーションで要素を指定して、Factoryでアサインする感じ。

PageFactory - selenium - Description of the PageFactory in the WebDriver support library. - Browser automation framework - Google Project Hosting

Javaならこの辺りまでかな。

からのSpock

スッキリしたところで、よくよくテストケースを見ると、似たようなコードが何個もあって。
このデータの場合はこうなるはず!ってのが何個も書いてあるので。Spock使った Data Driven Testing の出番ですね。

http://spock-framework.readthedocs.org/en/latest/data_driven_testing.html#data-tables

さらにスッキリしたー!

最後にGeb

ここまででも結構満足してるんだけど。あえて言うなら

  • PageObjectってパターンに対して、独自の基底クラスを書いちゃってたのが気に入らない。
  • あと、テストクラスでdriverを扱ってるのが気に入らない。

そこで、Gebですよ!PageObjectの仕組みを持ってるし。driverクラスの管理は別途してくれるし。幸せです。
GroovyのmissingXxx系をふんだんに使ってるので見せなくていいものは省略できて、コード量も2/3くらいになった感じ。テスト「コード」というより、もはや「仕様書」。

実際にプロダクトオーナーに、そのテストケースを見せて「どう?認識合ってる?」「うん。合ってる。」
って感じでやりとりできて幸せでした。

でした!楽しかった!