SlideShare una empresa de Scribd logo
1 de 29
Cucumber, cuke4duke, and Groovy




          Christopher Bartling
Summary

• Acceptance Test-driven Development
• Introduce Cucumber concepts
• Introduce cuke4duke’s role
• Introduce Groovy’s role
• Demonstration and discussion
Presentation materials


• https://bitbucket.org/cebartling/
  presentations/
• Presentation and demo in repository
Why?

• Customer/business not engaged in story
  process
• User stories without good acceptance tests
• Ambiguous “developer done”
Acceptance Test-Driven
    Development
• Acceptance tests are owned by the
  customer/business owner
• Specify the “what” of a feature
• Expressed in the language of the problem
  domain
• Written as a team
Why ATDD?

• Features need to be unambiguously and
  concisely specified
• Developers need to know when they are
  done with a feature
• Automated testing to ensure features never
  regress/break
Cucumber
• A behavior-driven development (BDD) tool
• Outside-in testing
• Business-readable DSL
• Implemented in Ruby, runs on JRuby
• Supports tests in tables, ala FIT
• http://cukes.info/
Cucumber

• Features and scenarios
• Steps
• Step definitions
• Hooks
• Tags
Features

• Features are modules of functionality
• Feature files have a .feature extension
• Written in Gherkin
• Contain one or more scenarios
Feature example

Feature: Serve coffee
In order to earn money
Customers should be able to
buy coffee at all times
Organizing Features
• The features directory can contain
  subdirectories of feature themes

  features

        insurance

        accounts_payable

        invoicing
Scenarios

• Consist of steps
 • Given, When, and Then
• Executable via matching step definitions
• http://blog.objectmentor.com/articles/
  2008/11/27/the-truth-about-bdd
Steps

• Given: put the system in a known state
• When: describes the key action
• Then: observe outcome(s)
• Use And and But to augment the three
  steps
Step definitions
• Executable code
• Use regular expressions to match the steps
  in feature files
• Typically written in Ruby
 • Foreshadow: cuke4duke allows any JVM
    language to be used
Hooks

• Allows running code at various points of
  the Cucumber test cycle
• Typically reside in the support directory
• Scenario hooks: Before, After
• Step hooks: AfterStep
Background

• Add context to a set of scenarios in a
  feature
• Run before each scenario, but after the
  Before hooks
• Typically consist of Given and And steps
Tags
• Allow categorization of features and
  scenarios
• Features and scenarios can have multiple tags
  @dbunit-load
  Scenario: Delete a photo album
Tagged hooks

• Allows fine-grained control of hooks for
  certain features or scenarios


  Before(‘@dbunit-load’)
cuke4duke

• Brings Cucumber to the JVM via JRuby
 • No need to program in Ruby
• Step definitions, hooks and other
  supporting classes can be implemented in a
  variety of JVM languages
JRuby dependency
• Use the following system property to install
  Ruby gems for use by cuke4duke

  -Dcucumber.installGems=true


• Necessary for first-time installs and
  cuke4duke upgrades
cuke4duke

• Ant support
• Maven support via plugin
• Spring Framework support (Java step
  definitions only)
• Google Guice support
Filtering with tags
• Tags are helpful for filtering groups of
  scenarios during a execution run
• Ensure Maven POM has cukeArgs as a pass-
  through argument
  <cucumberArg>${cukeArgs}</cucumberArg>


• Use the work in progress tag: @wip
  mvn cuke4duke:cucumber -DcukeArgs="--tags @wip"
Groovy’s role

• Step definitions can be written in many JVM
  languages
• Groovy works well for step definitions and
  other helper objects
cuke4duke.GroovyDsl


• Given, When, Then DSL for your Groovy
  step definitions
• No need to use Java annotations
WebDriver
• Web UI testing tool
• Being merged with Selenium for 2.0 release
• Native browser control, not JavaScript
 • Firefox extension
 • Internet Explorer Automation controls
• Object-based API
PageObjects pattern

• Use the PageObject pattern to verify web
  elements on a page
 • DRY up your verification logic
• Use PageFactory to bind the WebDriver
  and WebElement objects to your
  PageObject implementation
Cucumber book


•   Co-authored by Aslak Hellesøy

    •   Creator of Cucumber and
        cuke4duke
Interesting reads

• http://blog.dannorth.net/whats-in-a-story/
• http://www.martinfowler.com/bliki/
  BusinessReadableDSL.html
• http://en.wikipedia.org/wiki/
  Behavior_driven_development
Contact information

• chris.bartling@gmail.com
• Twitter: cbartling
• Blog: http://bartling.blogspot.com

Más contenido relacionado

La actualidad más candente

Apigility – Lightning Fast API Development - OSSCamp 2014
Apigility – Lightning Fast API Development - OSSCamp 2014 Apigility – Lightning Fast API Development - OSSCamp 2014
Apigility – Lightning Fast API Development - OSSCamp 2014 OSSCube
 
Introduction to Laravel
Introduction to LaravelIntroduction to Laravel
Introduction to LaravelEli Wheaton
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsAgnieszka Figiel
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory CourseRuby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Coursepeter_marklund
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in PerlNaveen Gupta
 
Hello World on Slim Framework 3.x
Hello World on Slim Framework 3.xHello World on Slim Framework 3.x
Hello World on Slim Framework 3.xRyan Szrama
 
Web development basics (Part-6)
Web development basics (Part-6)Web development basics (Part-6)
Web development basics (Part-6)Rajat Pratap Singh
 
Introduction to React Native & Redux
Introduction to React Native & ReduxIntroduction to React Native & Redux
Introduction to React Native & ReduxBarak Cohen
 
How Symfony Changed My Life
How Symfony Changed My LifeHow Symfony Changed My Life
How Symfony Changed My LifeMatthias Noback
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with DexterityDavid Glick
 
Automated Testing with Ruby
Automated Testing with RubyAutomated Testing with Ruby
Automated Testing with RubyKeith Pitty
 
Getting big without getting fat, in perl
Getting big without getting fat, in perlGetting big without getting fat, in perl
Getting big without getting fat, in perlDean Hamstead
 
Making the Most of Modern PHP in Drupal 7
Making the Most of Modern PHP in Drupal 7Making the Most of Modern PHP in Drupal 7
Making the Most of Modern PHP in Drupal 7Ryan Szrama
 
Dexterity in the Wild
Dexterity in the WildDexterity in the Wild
Dexterity in the WildDavid Glick
 
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016Codemotion
 
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra  SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra Sencha
 
Web development basics (Part-4)
Web development basics (Part-4)Web development basics (Part-4)
Web development basics (Part-4)Rajat Pratap Singh
 
Ruby On Rails Introduction
Ruby On Rails IntroductionRuby On Rails Introduction
Ruby On Rails IntroductionThomas Fuchs
 

La actualidad más candente (20)

Apigility – Lightning Fast API Development - OSSCamp 2014
Apigility – Lightning Fast API Development - OSSCamp 2014 Apigility – Lightning Fast API Development - OSSCamp 2014
Apigility – Lightning Fast API Development - OSSCamp 2014
 
Introduction to Laravel
Introduction to LaravelIntroduction to Laravel
Introduction to Laravel
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory CourseRuby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in Perl
 
Hello World on Slim Framework 3.x
Hello World on Slim Framework 3.xHello World on Slim Framework 3.x
Hello World on Slim Framework 3.x
 
Web development basics (Part-6)
Web development basics (Part-6)Web development basics (Part-6)
Web development basics (Part-6)
 
Cqrs api
Cqrs apiCqrs api
Cqrs api
 
Introduction to React Native & Redux
Introduction to React Native & ReduxIntroduction to React Native & Redux
Introduction to React Native & Redux
 
How Symfony Changed My Life
How Symfony Changed My LifeHow Symfony Changed My Life
How Symfony Changed My Life
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with Dexterity
 
Automated Testing with Ruby
Automated Testing with RubyAutomated Testing with Ruby
Automated Testing with Ruby
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
Getting big without getting fat, in perl
Getting big without getting fat, in perlGetting big without getting fat, in perl
Getting big without getting fat, in perl
 
Making the Most of Modern PHP in Drupal 7
Making the Most of Modern PHP in Drupal 7Making the Most of Modern PHP in Drupal 7
Making the Most of Modern PHP in Drupal 7
 
Dexterity in the Wild
Dexterity in the WildDexterity in the Wild
Dexterity in the Wild
 
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016
 
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra  SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra
 
Web development basics (Part-4)
Web development basics (Part-4)Web development basics (Part-4)
Web development basics (Part-4)
 
Ruby On Rails Introduction
Ruby On Rails IntroductionRuby On Rails Introduction
Ruby On Rails Introduction
 

Similar a Cucumber, Cuke4Duke, and Groovy

CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...E. Camden Fisher
 
Acceptance Test-driven Development with Cucumber-jvm
Acceptance Test-driven Development with Cucumber-jvmAcceptance Test-driven Development with Cucumber-jvm
Acceptance Test-driven Development with Cucumber-jvmChristopher Bartling
 
Pipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei MccollumPipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei MccollumLorelei McCollum
 
Continuous Deployment with Kubernetes, Docker and GitLab CI
Continuous Deployment with Kubernetes, Docker and GitLab CIContinuous Deployment with Kubernetes, Docker and GitLab CI
Continuous Deployment with Kubernetes, Docker and GitLab CIalexanderkiel
 
The Art and Zen of Managing Nagios With Puppet
The Art and Zen of Managing Nagios With PuppetThe Art and Zen of Managing Nagios With Puppet
The Art and Zen of Managing Nagios With PuppetMike Merideth
 
Docker and Puppet for Continuous Integration
Docker and Puppet for Continuous IntegrationDocker and Puppet for Continuous Integration
Docker and Puppet for Continuous IntegrationGiacomo Vacca
 
Automated Testing with Cucumber, PhantomJS and Selenium
Automated Testing with Cucumber, PhantomJS and SeleniumAutomated Testing with Cucumber, PhantomJS and Selenium
Automated Testing with Cucumber, PhantomJS and SeleniumDev9Com
 
Efficient Parallel Testing with Docker
Efficient Parallel Testing with DockerEfficient Parallel Testing with Docker
Efficient Parallel Testing with DockerLaura Frank Tacho
 
Nightwatch JS for End to End Tests
Nightwatch JS for End to End TestsNightwatch JS for End to End Tests
Nightwatch JS for End to End TestsSriram Angajala
 
Behavior Driven Development - TdT@Cluj #15
Behavior Driven Development - TdT@Cluj #15Behavior Driven Development - TdT@Cluj #15
Behavior Driven Development - TdT@Cluj #15Tabăra de Testare
 
The Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with PuppetThe Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with PuppetVictorOps
 
Gradle 2.breaking stereotypes.
Gradle 2.breaking stereotypes.Gradle 2.breaking stereotypes.
Gradle 2.breaking stereotypes.Stfalcon Meetups
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Ryan Cuprak
 
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...Nagios
 
MyHeritage - QA Automations in a Continuous Deployment environment
MyHeritage -  QA Automations in a Continuous Deployment environmentMyHeritage -  QA Automations in a Continuous Deployment environment
MyHeritage - QA Automations in a Continuous Deployment environmentMatanGoren
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
Using Grunt with Drupal
Using Grunt with DrupalUsing Grunt with Drupal
Using Grunt with Drupalarithmetric
 

Similar a Cucumber, Cuke4Duke, and Groovy (20)

CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
 
Acceptance Test-driven Development with Cucumber-jvm
Acceptance Test-driven Development with Cucumber-jvmAcceptance Test-driven Development with Cucumber-jvm
Acceptance Test-driven Development with Cucumber-jvm
 
Pipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei MccollumPipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei Mccollum
 
Continuous Deployment with Kubernetes, Docker and GitLab CI
Continuous Deployment with Kubernetes, Docker and GitLab CIContinuous Deployment with Kubernetes, Docker and GitLab CI
Continuous Deployment with Kubernetes, Docker and GitLab CI
 
The Art and Zen of Managing Nagios With Puppet
The Art and Zen of Managing Nagios With PuppetThe Art and Zen of Managing Nagios With Puppet
The Art and Zen of Managing Nagios With Puppet
 
Docker and Puppet for Continuous Integration
Docker and Puppet for Continuous IntegrationDocker and Puppet for Continuous Integration
Docker and Puppet for Continuous Integration
 
Automated Testing with Cucumber, PhantomJS and Selenium
Automated Testing with Cucumber, PhantomJS and SeleniumAutomated Testing with Cucumber, PhantomJS and Selenium
Automated Testing with Cucumber, PhantomJS and Selenium
 
Efficient Parallel Testing with Docker
Efficient Parallel Testing with DockerEfficient Parallel Testing with Docker
Efficient Parallel Testing with Docker
 
Nightwatch JS for End to End Tests
Nightwatch JS for End to End TestsNightwatch JS for End to End Tests
Nightwatch JS for End to End Tests
 
Behavior Driven Development - TdT@Cluj #15
Behavior Driven Development - TdT@Cluj #15Behavior Driven Development - TdT@Cluj #15
Behavior Driven Development - TdT@Cluj #15
 
The Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with PuppetThe Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with Puppet
 
Gradle 2.breaking stereotypes.
Gradle 2.breaking stereotypes.Gradle 2.breaking stereotypes.
Gradle 2.breaking stereotypes.
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
 
Agile sites2
Agile sites2Agile sites2
Agile sites2
 
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
 
Testing in GO
Testing in GOTesting in GO
Testing in GO
 
MyHeritage - QA Automations in a Continuous Deployment environment
MyHeritage -  QA Automations in a Continuous Deployment environmentMyHeritage -  QA Automations in a Continuous Deployment environment
MyHeritage - QA Automations in a Continuous Deployment environment
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
Power of Azure Devops
Power of Azure DevopsPower of Azure Devops
Power of Azure Devops
 
Using Grunt with Drupal
Using Grunt with DrupalUsing Grunt with Drupal
Using Grunt with Drupal
 

Más de Christopher Bartling

Más de Christopher Bartling (11)

JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
 
Building Tropo Apps with Grails
Building Tropo Apps with GrailsBuilding Tropo Apps with Grails
Building Tropo Apps with Grails
 
CoffeeScript By Example
CoffeeScript By ExampleCoffeeScript By Example
CoffeeScript By Example
 
Acceptance Test Driven Development With Spec Flow And Friends
Acceptance Test Driven Development With Spec Flow And FriendsAcceptance Test Driven Development With Spec Flow And Friends
Acceptance Test Driven Development With Spec Flow And Friends
 
Introduction To Grails
Introduction To GrailsIntroduction To Grails
Introduction To Grails
 
Test Driven In Groovy
Test Driven In GroovyTest Driven In Groovy
Test Driven In Groovy
 
iPhone OS: The Next Killer Platform
iPhone OS: The Next Killer PlatformiPhone OS: The Next Killer Platform
iPhone OS: The Next Killer Platform
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Grails Overview
Grails OverviewGrails Overview
Grails Overview
 
Rich Web Clients 20081118
Rich Web Clients 20081118Rich Web Clients 20081118
Rich Web Clients 20081118
 

Cucumber, Cuke4Duke, and Groovy

  • 1. Cucumber, cuke4duke, and Groovy Christopher Bartling
  • 2. Summary • Acceptance Test-driven Development • Introduce Cucumber concepts • Introduce cuke4duke’s role • Introduce Groovy’s role • Demonstration and discussion
  • 3. Presentation materials • https://bitbucket.org/cebartling/ presentations/ • Presentation and demo in repository
  • 4. Why? • Customer/business not engaged in story process • User stories without good acceptance tests • Ambiguous “developer done”
  • 5. Acceptance Test-Driven Development • Acceptance tests are owned by the customer/business owner • Specify the “what” of a feature • Expressed in the language of the problem domain • Written as a team
  • 6. Why ATDD? • Features need to be unambiguously and concisely specified • Developers need to know when they are done with a feature • Automated testing to ensure features never regress/break
  • 7. Cucumber • A behavior-driven development (BDD) tool • Outside-in testing • Business-readable DSL • Implemented in Ruby, runs on JRuby • Supports tests in tables, ala FIT • http://cukes.info/
  • 8. Cucumber • Features and scenarios • Steps • Step definitions • Hooks • Tags
  • 9. Features • Features are modules of functionality • Feature files have a .feature extension • Written in Gherkin • Contain one or more scenarios
  • 10. Feature example Feature: Serve coffee In order to earn money Customers should be able to buy coffee at all times
  • 11. Organizing Features • The features directory can contain subdirectories of feature themes features insurance accounts_payable invoicing
  • 12. Scenarios • Consist of steps • Given, When, and Then • Executable via matching step definitions • http://blog.objectmentor.com/articles/ 2008/11/27/the-truth-about-bdd
  • 13. Steps • Given: put the system in a known state • When: describes the key action • Then: observe outcome(s) • Use And and But to augment the three steps
  • 14. Step definitions • Executable code • Use regular expressions to match the steps in feature files • Typically written in Ruby • Foreshadow: cuke4duke allows any JVM language to be used
  • 15. Hooks • Allows running code at various points of the Cucumber test cycle • Typically reside in the support directory • Scenario hooks: Before, After • Step hooks: AfterStep
  • 16. Background • Add context to a set of scenarios in a feature • Run before each scenario, but after the Before hooks • Typically consist of Given and And steps
  • 17. Tags • Allow categorization of features and scenarios • Features and scenarios can have multiple tags @dbunit-load Scenario: Delete a photo album
  • 18. Tagged hooks • Allows fine-grained control of hooks for certain features or scenarios Before(‘@dbunit-load’)
  • 19. cuke4duke • Brings Cucumber to the JVM via JRuby • No need to program in Ruby • Step definitions, hooks and other supporting classes can be implemented in a variety of JVM languages
  • 20. JRuby dependency • Use the following system property to install Ruby gems for use by cuke4duke -Dcucumber.installGems=true • Necessary for first-time installs and cuke4duke upgrades
  • 21. cuke4duke • Ant support • Maven support via plugin • Spring Framework support (Java step definitions only) • Google Guice support
  • 22. Filtering with tags • Tags are helpful for filtering groups of scenarios during a execution run • Ensure Maven POM has cukeArgs as a pass- through argument <cucumberArg>${cukeArgs}</cucumberArg> • Use the work in progress tag: @wip mvn cuke4duke:cucumber -DcukeArgs="--tags @wip"
  • 23. Groovy’s role • Step definitions can be written in many JVM languages • Groovy works well for step definitions and other helper objects
  • 24. cuke4duke.GroovyDsl • Given, When, Then DSL for your Groovy step definitions • No need to use Java annotations
  • 25. WebDriver • Web UI testing tool • Being merged with Selenium for 2.0 release • Native browser control, not JavaScript • Firefox extension • Internet Explorer Automation controls • Object-based API
  • 26. PageObjects pattern • Use the PageObject pattern to verify web elements on a page • DRY up your verification logic • Use PageFactory to bind the WebDriver and WebElement objects to your PageObject implementation
  • 27. Cucumber book • Co-authored by Aslak Hellesøy • Creator of Cucumber and cuke4duke
  • 28. Interesting reads • http://blog.dannorth.net/whats-in-a-story/ • http://www.martinfowler.com/bliki/ BusinessReadableDSL.html • http://en.wikipedia.org/wiki/ Behavior_driven_development
  • 29. Contact information • chris.bartling@gmail.com • Twitter: cbartling • Blog: http://bartling.blogspot.com

Notas del editor