Post on 17-Jul-2015
transcript
Pragmatic Browser Automation with GebNaresha K, Chief Technologist Channel Bridge Software Labs @naresha_k
16
Browser
import geb.Browserimport org.openqa.selenium.firefox.FirefoxDriver
Browser browser = new Browser(driver: new FirefoxDriver())
17
Browserimport geb.Browserimport org.openqa.selenium.firefox.FirefoxDriver
Browser browser = new Browser(driver: new FirefoxDriver())
// driver.get("http://seleniumconf.org/")browser.go 'http://seleniumconf.org/'
18
Accessing Elements// driver.findElement(By.name("j_username")) def username = browser.$(name: 'j_username')
// username.sendKeys("user1")username << 'user1'
println username.value()
20
External Config// GebConfig.groovyimport org.openqa.selenium.firefox.FirefoxDriver
driver = { def driverInstance = new FirefoxDriver() driverInstance.manage().window().maximize() driverInstance
}
Browser browser = new Browser()
// driver.get("http://seleniumconf.org/")browser.go 'http://seleniumconf.org/'browser.quit()
21
Hello GebBrowser browser = new Browser()browser.go “http://localhost:8000/app/login.html"browser.$(name: 'j_username') << 'user1'browser.$(name: 'j_password') << 'secret'browser.$('#submit').click()browser.quit()
22
Hello Geb - Improved
Browser.drive{go “http://localhost:8000/app/login.html"$(name: 'j_username') << 'user1'$(name: 'j_password') << 'secret'$('#submit').click()
}.quit()
23
Configurable URL
Browser.drive{go “login.html”$(name: 'j_username') << 'user1'$(name: 'j_password') << 'secret'$('#submit').click()
}.quit()
// GebConfig.groovybaseUrl = "http://localhost:8000/app/"
27
<h2>Introduction</h2><h2>Navigator</h2><h2>Page Objects</h2><h2>Summary</h2>
$('h2').text() == 'Introduction'
$('h2', 1).text() == 'Navigator'
$('h2').size() == 4
28
<h2>Introduction</h2><h2>Navigator</h2><h2>Page Objects</h2><h2>Summary</h2>
$('h2', 0..2)*.text() == ['Introduction', 'Navigator', 'Page Objects']
29
<h2 duration="5">Introduction</h2><h2 duration="15">Navigator</h2><h2>Page Objects</h2><h2 duration="5">Summary</h2>
$('h2', duration: '5').size() == 2
$('h2', text: 'Summary').size() == 1
30
<h2 duration="5">Introduction</h2><h2 duration="15">Navigator</h2><h2>Page Objects</h2><h2 duration="5">Summary</h2>
$('h2', text: contains('o')).size() == 2
$('h2', text: iContains('o')).size() == 3
$('h2', duration: contains('5')).size() == 3
31
<div class="languages"><div class="language jvm">Java</div><div class="language clr">C#</div><div class="language jvm">Groovy</div><div class="language clr">F#</div><div class="language erlang">Elixir</div>
</div>
$('div.languages').find('.jvm').each{ element ->println element.text()
}
Java Groovy
32
<div class="languages"><div class="language jvm">Java</div><div class="language clr">C#</div><div class="language jvm">Groovy</div><div class="language clr">F#</div><div class="language erlang">Elixir</div>
</div>
$('.language').filter('.jvm').each{ element ->println element.text()
}
Java Groovy
$('.language').not('.clr').each{ element ->println element.text()
}
Java Groovy Elixir
38
Modulesclass Record extends Module{
static content = {column {index -> $('td', index)}productCode {column(1).text()}price { column(2).text().toInteger()}
}}
class ProductPage extends Page{static url = 'table.html'static content = {
products {moduleList Record, $('table tbody tr')}}
}
39
Modules
Browser.drive() {to ProductPageproducts.each{ product ->
println "${product.productCode} -> ${product.price}"}
}.quit()
42
Wait<div id="dynamic"></div>
waitFor { $('#dynamic').text()}waitFor(8) { $('#dynamic').text()}waitFor(8, 0.5) { $('#dynamic').text()}waitFor('slow') { $('#dynamic').text()}
// GebConfig.groovywaiting { presets { slow { timeout = 12 retryInterval = 1 } }}
43
Integration
https://www.flickr.com/photos/lumaxart/2137737248
45
Spock Example@Stepwiseclass SampleGebSpec extends GebReportingSpec{
def "User can login"(){ when: to LoginPage
login('user1', 'secret') then:
at DashboardPageand:header.pageTitle == 'Dashboard'
}
}
47
• Power of WebDriver • Elegance of jQuery selection • Robustness of Page Object
modeling • Expressiveness of Groovy
Summary
Welcome Geb
48
ReferencesOfficial Geb Page - http://www.gebish.org/
Example - https://github.com/geb/geb-example-gradle
Spock Documentation - http://spock-framework.readthedocs.org/en/latest/
Code samples - https://github.com/naresha/seconf2014