Geb?
今朝ゴロゴロ調べてたら偶然Gebというものに出会い、面白そうだなーと。
んでドキュメントをさらーっと必要そうなとこだけ読んだんだけど。
やっぱり良さそう。使ってみよっと。
何が良さそうってSelenium WebDriverでテスト書くときに処理を読みやすく書けそうなん。
こんな感じ
例えば、ここからの引用だけど、
The Book Of Geb - Pages - version 0.10.0
こんな風に書けます:
Browser.drive { to GoogleHomePage search "Chuck Norris" at GoogleResultsPage resultLink(0).text().contains("Chuck") }
1. Googleのホームページを開いて
2. "Chuck Norris"を検索すると
3. Googleの検索結果ページに遷移して
4. 結果リンクの1番目のテキストには"Chuck"が含まれている
ってテストですね。読みやすいですね。
Spockでもう少し読みやすくなるかな。
class GoogleChuckNorrisSpec extends GebSpec { def "Chuck Norrisを検索したら最初の結果にChuckが含まれとる"() { setup: to GoogleHomePage when: search "Chuck Norris" then: at GoogleResultsPage and: resultLink(0).text().contains("Chuck") } }
ってこの程度の例じゃ読みやすくなったかどうかわからんか。
Page
GoogleHomePageとGoogleResultsPageはPageオブジェクトとして
こんな感じで定義されてます:
import geb.* class GoogleHomePage extends Page { static url = "http://google.com/?complete=0" static at = { title == "Google" } static content = { searchField { $("input[name=q]") } searchButton(to: GoogleResultsPage) { $("input[value='Google Search']") } } void search(String searchTerm) { searchField.value searchTerm searchButton.click() } } class GoogleResultsPage extends Page { static at = { waitFor { title.endsWith("Google Search") } } static content = { results(wait: true) { $("li.g") } result { index -> results[index] } resultLink { index -> result(index).find("a.l") } } }
toで開くときにurlを使って、そのページにいるかな?ってののチェックにatを使って
ページ内の要素にアクセスするときにcontentを使ってるっぽい。面白いなー。