Geb is a browser automation solution.
Geb uses the power of Selenium WebDriver and more.
Geb + Spock API simplifies test automation using Given-When-Then Concept.
1. GEB WITH SPOCK
Browser Test automation and
Specification Framework
By Monika Gurram
KickStartPros.com
2. GEB FEATURES
PRONOUNCED AS “JEB”
Geb is a browser automation framework written in
Groovy Language.
Expressiveness and Dynamic nature of Groovy language
makes Geb framework less Code Ceremony.
Geb uses power of Selenium WebDriver. Cross browser
support.
Geb provides jQuery-like API for web content selection.
3. GEB POWER
GEB USES WEBDRIVER & GROOVY DSL
Selenium WebDriver 2.x cross browser support like IE, FF,
Chrome, Opera & Headless browsers.
Groovy DSL
to : option defines the page the browser will be sent to if the
content is clicked.
content : descripts the page web elements content.
required : option controls whether or not the content returned by
the definition has to exist or not.
cache: option controls whether or not to evaluate each time the
content is requested. Caching makes tests run fast.
wait : wait for the content using default wait time.
page: option allows the definition of a frame page.
4. GEB NAVIGATOR API
JQUERY-LIKE API
Navigator API is jQuery-like API for finding, filtering and
interacting with DOM elements.
The $ Function for getting DOM elements:
CSS3 Selectors:
$(«css selector», «index or range»,
«attribute/text matchers»)
$("div.some-class p:first[title='something']")
Find via index and/or attribute matching:
$("h1", 2, class: "heading")
$("p", name: "description")
$("ul.someClass li", 2)
Text value matching:
$("h1", text: "All about Geb")
Chaining:
$("div").find(".b")
$("div").filter(".c").parents()
and many more built in capabilities.
5. GEB FEATURES
MORE …
Geb has first class support for the Page Object pattern
for modelling the UI pages.
Geb provides less code Ceremony.Geb has built-in DSL.
Geb provides integration with testing frameworks such
as Spock, JUnit & TestNG.
Geb is easy to integrate with build tools like Gradle and
Maven
6. GEB PAGE OBJECTS
BUILT-IN PAGE OBJECTS SUPPORT
The page objects contains logic for page selectors and page operations.
Groovy's DSL capabilities allows easily define the web pages in a
maintainable and extensible manner.
import geb.Page
class LoginPage extends Page {
static url = "http://myapp.com/login"
static at = { heading.text() == "Please Login" }
static content = {
heading { $("h1") }
loginForm { $("form.login") }
loginButton(to: WelcomePage) { $("input", type: "submit",
name: "login") }
}
}
class WelcomePage extends Page {
static at = { heading.text() == “Welcome to myApp" }
static content = {
heading { $("h1") }
}
}
Page
Objects
Geb DSL
7. GEB TEST CLASS
CLEAN TEST CODE
The page objects contains logic for page selectors and page
operations.
Test classes code is clean and reusable page objects code.
Test classes contains
Mock data, assertions
and calls to page objects.
import geb.Browser
Browser.drive {
to LoginPage
assert at(LoginPage)
loginForm.with {
username = “myUser”
password = “myPassword”
}
loginButton.click()
assert at(WelcomePage)
}
8. GEB CODING SIMPLE
AJAX WAIT SIMPLE
In Groovy Language = Less
Code Ceremony.
def element =
waitFor{$("p#dynamicContentI
d")}
// And then Assert code.
assert element.text() ==
"Added dynamically!"
In Java Language = High Code
Ceremony.
WebDriverWait wait =
new WebDriverWait(driver,
10);
WebElement element =
wait.until(
ExpectedConditions.visibilit
yOfElementLocated(By.id("dyn
amicContentId")));
// And then Assert code…
assertEquals(element.getText
(), "Added dynamically!");
Geb + Groovy + Selenium Java + Selenium
9. GEB CONFIGURATION
SIMPLE TO CONFIGURE
Geb allows Option to provide runtime arguments. Easy to run tests across multiple
browsers and multiple test environments without changing code.
–Dgeb.env=firefox (browser choice)
–Dbase.url=http://myapp.com/. (application url)
Sample GebConfig.groovy file as below.
import org.openqa.selenium.*
waiting {
timeout = 10
}
// System property 'geb.env' is set to 'chrome' or 'ie' or 'firefox'
environments {
chrome { driver = { new ChromeDriver() } }
firefox { driver = { new FirefoxDriver()} }
ie { driver = { new InternetExplorerDriver() }
}
}
reportsDir = "target/geb-reports"
10. WHAT IS SPOCK?
SPECIFICATION LANGUAGE
Spock is a testing framework written in Groovy
language.
Good Test tool for Behavior-Driven Development (BDD).
It’s highly expressive specification language.
Runs with JUnit runner and compatible with all IDEs like
eclipse and IntellliJ.
12. SPOCK BLOCKS
READABLE CODE BLOCKS
Spock follows BDD’s Given-When-Then (Gherkin)
concept.
Given Step: put the system/browser in a known state/page
before the user.
When Step: describe the key action the user performs. UI
Operations like click.
Then Step: observe outcomes of test. Your assertions goes
here.
Spock specification tests are more readable and
maintainable.
13. GEB WITH SPOCK
READABLE CODE
import geb.Page
import geb.spock.GebSpec
class LoginSpec extends GebSpec {
def "login to app"() {
given: "As an app user, access login page."
to LoginPage
when: "user enter valid login details"
loginForm.with {
username = "myUser"
password = "myPassword"
}
and: "performed login operation"
loginButton.click()
then: "user need to be successfully logged
in."
at WelcomePage
}
}
Spock Blocks
14. REFERENCE LINKS
Selenium WebDriver
Behavior-driven development
Page Objects Pattern
Book of Geb
Spock Project
Thanks
Monika Gurram
KickStartPros.com