Capybaraで対話的にProject Eulerを遊ぶ
ログイン後、Project Eulerの問題一覧が表示されています。1ページ目に表示されている問題一覧の各行からProblemクラスのインスタンスを生成し、まだ解いてない問題をひとつ選択して詳細を開いてみましょう。 要素が単一の場合は`Capybara::Session#find`、複数存在する場合は`Capybara::Session#all`でCSSセレクタまたはXPathを利用して検索します。検索して帰る結果は`Capybara::Node::Element`クラスのインスタンスで、次のようなメソッドが利用可能です。 よく使うのは、要素のテキストを抽出する`Capybara::Node::Element#text`、リンク要素に対して実行する`click`や`select`などでしょうか。 さて、問題詳細ページは以下のような画面となっています。問題文を出力してみましょう。
問題自体は横着してRubyのprimeライブラリを使い、さくっと解いてしまいます。
答えは6857であるとわかりました。これをフォームに入れて提出しましょう。キャプチャコードは先ほどのスクリーンショットを参考にします。
正解です!
以上の例で、Capybara(capybara-webkit)を使えば普段ブラウザで行うような操作をRubyから実行できることがなんとなく伝わっていれば幸いです。途中スクリーンショットを取って確かめつつ進めていきましたが、パターンがわかってしまえばすべてコードで完結させることも可能です。
Capybaraで人生を豊かにする
以上でCapybaraの紹介は終わりです。最後に一点、ここで挙げた例以外にも普段使いのウェブサイトをCapybara化(?)するといろいろと捗る、ということをお伝えして終わりとします。
たとえば筆者は古い本を図書館で借りて読むのが好きなのですが、現在借りている本の情報を図書館ウェブサイトから引っ張ってきて、返却日が近付くとTwitter botに通知させています。また、このAllAbout連載自体も、管理画面へアクセスすることなくコマンドラインから更新できるようなスクリプトを書いておりたいへん便利です。
このように、(他人の再利用性は低いですが)自分の生活が豊かになる実用的なプログラムを書けるのがCapybaraの魅力だと思います。興味をもった方はぜひいろいろと試してみてください。