Behavior Driven Development (BDD) focuses on defining expected application behaviors through user stories. Cucumber and Capybara are tools that support BDD. Cucumber allows writing tests in plain language and organizing them into feature files. Capybara is a framework that simulates user interactions and uses a domain-specific language to write tests. It supports drivers like Selenium to test web applications with JavaScript.
2. Behavior Driven Development/Testing
❖ What is BDD?
➢ The main focus is on the expected behavior of the application and
it’s components.
➢ User stories created and maintained collaboratively by all
stakeholders
❖ What are the benefits?
➢ Define verifiable, executable and unambiguous requirements
➢ Developing features that truly add business value
➢ Preventing defects rather than finding defects
➢ Bring QA involvement to the forefront, great for team dynamics
3. Cucumber Basics
❖ Testing tool based on BDD written in Ruby
❖ Tests are written in plain language called Gherkin based BDD
style of Given, When, Then, which any layperson can
understand.
❖ Tests are grouped into feature files with .feature extension
➢ Eg:Feature: As a myish user I should be able to login
Scenario: Successful login
Given I am on the Google home page
When I fill in email and password
And I click login button
Then I should be able to click on the profile
4. CAPYBARA
❖ Capybara is a web-based automation framework used for creating
functional tests that simulate how users would interact with the
application
❖ Capybara is library/gem built to be used on top of underlying web-
based driver
❖ Offers user-friendly DSL ( Domain Specific Language )
❖ Supported driver
➢ Rack::test
■ Default driver. No JavaScript support
➢ Selenium-webdriver
■ Mostly used in web-based automation FW
➢ Capybara-webkit
■ For true headless testing with JavaSript support
5. CAPYBARA :
❖ Basic DSL :
➢visit('page_url') # navigate to page
➢click_link('id_of_link') # click link by id
➢click_link('link_text') # click link by link text
➢click_button('button_name') # fill text field
➢fill_in('First Name', :with => 'John') # choose radio button
➢choose('radio_button') # choose radio button
➢check('checkbox') # check in checkbox
➢uncheck('checkbox') # uncheck in checkbox
➢select('option', :from=>'select_box') # select from dropdown
➢attach_file('image', 'path_to_image') # upload file
8. DEMO
Project structure :
features – folder to host all your feature files
step_definitions – folder to host all your step definition Ruby files
support – folder to host your configuration files (env.rb)
Gemfile – defines the top-level gems to be used in your project
9. DEMO
Sample: simple_search.feature :
– describes the features that a user will be able to use in the
program
Feature: As a user I should be able to perform simple google
search
Scenario: A simple google search scenario
Given I am on the main google search
When I fill in "q" with "Cucumber test"
And I click "gbqfb" button
And I click on the first result
Then I should see "Cucumber lets software development teams
describe how software should behave in plain text."
10. Sample: search_step.rb
– describes the actions that user will do for each step.
Given /^I am on the main google search$/ do
visit ('/')
end
When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
fill_in(field, :with => value)
end
Then /^I click "([^"]*)" button$/ do |button|
click_button(button)
end
Then /^I click on the first result$/ do
find(:xpath, "//html/body/div[3]/div[2]/div/div[5]/div[2]/div[2]/div/div[2]/div/ol/li/div/h3/a").click
end
Then /^I should see "([^"]*)"$/ do |text|
page.should have_content(text)
end
12. Sample: Gemfile
– a format for describing gem dependencies required to execute
Ruby codes
source "http://rubygems.org"
group(:test) do
gem 'cucumber'
gem 'capybara'
gem 'rspec'
end
13. Main cucumber commands
command to run the script :
cucumber features/<name of the feature
file>.feature
command to generate the report:
run this command by going to your project
directory
cucumber features --format html --out
reports