Posts

Showing posts from October, 2014

How to Re-run Failed Scenarios in Cucumber

Usually we require to rerun the failed test cases again once they are fixed or for double verification.In cucumber we can do that easily without developing any customize code for it.


Cucumber directly supports the feature to re- run the failed test cases as following:

Run Cucumber with rerun formatter simply using :

cucumber -f rerun --out rerun.txt
It will output locations of all failed scenarios to the file.

Then you can rerun them by using

cucumber @rerun.txt
This can be further bundled as a rake task and can be run simply as :

require 'cucumber'
require 'cucumber/rake/task'

Cucumber::Rake::Task.new(:jenkins_with_rerun) do |t|
  cucumber -f rerun --out rerun.txt

  cucumber @rerun.txt
end

task :default => :jenkins_with_rerun
 And then can be run as simply "rake" inside the project folder:
C:/>ProjectFolder>rake



How to reuse steps in Cucumber

While working in cucumber many times we find that some piece of code is redundant across multiple step definitions.To make this work a simple solution is callling a step from another step like:

Given/^I login successfully$/ step "I login with valid credentials"end

But this approach is problematic from debugging perspective as in case of we need to debug the scripts as it will lead to only first level of step calling which will not be helpful for issues resolution.



Somewhat better way to achieve re usability,robustness and clarity is to simply fall back on language basic primitives -methods.We may encapsulate these small defs inside a module and extract it to "World" and call the method directly from where ever required as below:

#/support/world_extensions.rbmoduleKnowsUserdef login visit('/login') fill_in('User name', with: user.name) fill_in('Password', with: user.password) click_button('Log in')enddef user @u…

How to Uncheck All checkboxes Using Cucumber/Capybara

Sometimes while automating we need to have  all checkboxes unchecked as a precondition or baseline state in a given page.We can do that in Cucumber/Capybara using following code:

all('input[type=checkbox]').each do|checkbox|if checkbox.checked?then checkbox.click endend Similar logic can be developed for other types of objects if required or better object type and locator detail can be passed as parameters to achieve higher level of abstraction which will work for any type of objects.

Handling Dialog Boxes Using Cucumber

Today I will share the code to handle dialog boxes using Cucumber .

Assuming that you are using cucumber with capybara ,following code can be used:


When/^I confirm popup$/do page.driver.browser.switch_to.alert.accept endWhen/^I dismiss popup$/do page.driver.browser.switch_to.alert.dismiss end
Using the above generic code ,popups can be accepted or rejected as required. It utilizes the selenium webdriver API to handle that as capybara is simply calling the Selenium API.

This can be handled directly using selenium webdriver as below:

require"selenium-webdriver" driver =Selenium::WebDriver.for:firefox driver.navigate.to "http://mysite.com/page_with_alert.html" driver.find_element(:name,'element_with_alert_javascript').click a = driver.switch_to.alertif a.text =='A value you are looking for'   a.dismisselse   a.acceptend

Controlling Cucumber Tests By Driver Script

I will Show you how to  filter and run the cucumber tests by using the master driver script.We will use the following components for this as below:

1).YML based Configuration File
**************************************************************
env_1:
  Priority : p1

##############

ApplicationData:
      ResultsPath : "D:\\TestProject\\Results"
      FeaturesFolderPath : "D:\\TestProject"
      ResultFormat : "html"

***********************************************************************
This file will help us in providing the following info:
a).Tag Filter "p1" by which we can execute only high priority test scenarios.
b).Results Path Folder
c).Features folder path
d).Desired Result Format



2).Master Driver Script(Driver.rb)
********************************************************************************
#Importing the required libraries
require 'yaml'
require 'FileUtils'


#Reading the YML config file and loading the variables and c…