Geb Script

Geb Scriptは、Groovy言語で書かれたブラウザ自動化フレームワークである。

Selenium WebDriverで挙がっている問題（例えば、ログインボタンを押すだけでも多くのプログラミングが必要など）を解決するために誕生した。

Gebのメリット 
出典
Selenium WebDriverと比較して、より短く、よりわかりやすいテストを記述することができる。Gebの提供するナビゲーターAPI(Navigator API)というjQueryのようなAPIがそれを可能にしている。
Page Object patternをサポートしているので画面変更に強いテストを簡単に作成することができる。
Mavenで提供されるのでテスト作成の環境構築が簡単にできる。
GroovyなのでJavaと互換性があり、SeleniumWebDriverの既存資産をそのまま利用することができる。
Moduleを使うことで共通部分を部品化することができる。

Navigator APIとは 
出典
jQueryのような文法でコンテンツ内容を取得するAPIをGebでは、"Navigator API"と呼んでいる。
"$"関数を使うことでCSSセレクタを基にしてコンテンツ内容を取得することができる。

// CSS 3 selectors
$("div.some-class p:first[title='something']")
 
// index and/or attributeをマッチングすることで検索する
$("h1", 2, class: "heading")
$("p", name: "description")
$("ul.things li", 2)
 
//"text"は、テキスト内容要素のための特別な属性である
$("h1", text: "All about Geb")
 
// Gebが提供するmatcherや正規表現でも取得が可能
$("p", text: contains("Geb"))
$("input", value: ~/\d{3,}-\d{3,}-\d{3,}/)
 
// Chaining
$("div").find(".b")
$("div").filter(".c").parents()
$("p.c").siblings()

サンプルコード 
出典

以下、コードを実行することで「Google検索⇒検索結果⇒Wikipedia」という流れのWebテストが実施できる。
import geb.Browser
 
Browser.drive {
    go "http://google.com/ncr"
 
    // make sure we actually got to the page
    assert title == "Google"
 
    // enter wikipedia into the search field
    $("input", name: "q").value("wikipedia")
 
    // wait for the change to results page to happen
    // (google updates the page dynamically without a new request)
    waitFor { title.endsWith("Google Search") }
 
    // is the first link to wikipedia?
    def firstLink = $("li.g", 0).find("a")
    assert firstLink.text() == "Wikipedia"
 
    // click the link 
    firstLink.click()
 
    // wait for Google's javascript to redirect to Wikipedia
    waitFor { title == "Wikipedia" }
}

脚注 

ソフトウェアテスティング
ウェブ開発