Creating a Ruby Cucumber Project - Codoid
Select Page
QA Automation

Creating a Ruby Cucumber Project

In this article, we will show you how to create a feature file and implementation code using RubyMine.

Creating a Ruby Cucumber Project

This is our first blog post on Ruby Cucumber automation testing and as an automation testing services company, we would like to share basic and advanced techniques of automation testing with software testing & quality assurance communities.

In this article, we will show you how to create a feature file and implementation code using RubyMine. Before following up the below steps, make sure you have already configured RubyMine

Step1-Create Empty Ruby Project

File->New Project

Step2-Create Gem file

Select project directory, right click and click New->File

Create Gem file with the following Gem details as shown below.

Note: These Gem details will be published in our next article.

source 'http://rubygems.org'
gem 'cucumber', '1.2.1'
gem 'rspec', '2.10.0'
gem 'ffi', '1.3.1'
gem 'watir-webdriver', '0.7.0'
gem 'watir'
gem 'selenium-webdriver'
gem 'headless', '0.2.2'
gem 'titleize', '1.2.1'
gem 'json', '1.7.7'
gem 'gherkin', '<= 2.11.6'
gem 'syntax'
  

Step3-Directory Structure

Create sub folders as shown below

—>features

————->Project1

——————->feature

——————->pages

——————->step_definitions

————->Support

Step4-Create Shared Driver

Create SharedDriver.rb inside Support folder with the following code.

require 'rubygems'
require 'rspec'
require 'watir-webdriver'

include Selenium

#Creating Remote WebDriver
browser = Watir::Browser.new(:remote, :url => "http://SauceUsername:[email protected]:80/wd/hub",
                              :desired_capabilities => WebDriver::Remote::Capabilities.firefox)
#If you want to run it locally, use Watir::Browser.new :firefox
							  
Before do
  @browser = browser
end
  

Step5-Create Feature file

Create sample.feature file inside feature folder with the below steps

Feature: Sample Feature

  Scenario: Sample Scenario
    Given I launch https://codoid.com
    And I click on Login tab
    And I enter username
    And I enter password
    When I click Login button
    Then I see Home page
  

Step6-Create Step Definitions

Create Step Definitions with pending steps

Given(/^I launch http://www.codoid.com$/) do
  pending
end

And(/^I click on Login tab$/) do
  pending
end

And(/^I enter username$/) do
  pending
end

And(/^I enter password$/) do
  pending
end

When(/^I click Login button$/) do
  pending
end

Then(/^I see Home page$/) do
  pending
end
  

Step7-Create Page Object

class LoginPage
  attr_accessor :loginTab,:txtUsername,:txtPassword,:btnLogin

  def initialize(browser)
    @browser = browser
    @loginTab    = @browser.a(:text => "Login")
    @txtUsername = @browser.text_field(:id => "userId")
    @txtPassword = @browser.text_field(:id => "password")
    @btnLogin      = @browser.element(:id => "log_in_button")
  end

  def visit
    @browser.goto "https://codoid.com"
  end

  def clickLoginTab()
    @loginTab.click
  end

  def enterUsername(username)
    @txtUsername.set username
  end

  def enterPassword(password)
    @txtPassword.set password
  end

  def clickLoginButton
    @btnLogin.click
  end

  def verifyHomePageHeader()
    @browser.element(:text => "Dashboard").wait_until_present
  end
end
  

Step8-Call Page Methods in Step Definitions

Given(/^I launch http://www.codoid.com$/) do
  @LoginPage = LoginPage.new(@browser)
  @LoginPage.visit
end

And(/^I click on Login tab$/) do
  @LoginPage.clickLoginTab
end

And(/^I enter username$/) do
  @LoginPage.enterUsername("xxxxxxx")
end

And(/^I enter password$/) do
  @LoginPage.enterPassword("yyyyyyy")
end

When(/^I click Login button$/) do
  @LoginPage.clickLoginButton
end

Then(/^I see Home page$/) do
  @LoginPage.verifyHomePageHeader
end
  

Step9-Create cucumber.yml file

Create cucumber.yml file inside project directory as shown below

default: --format html --out=Report.html
  

Step10-Run the feature file


Once execution is done, open the report file


You will see the report as shown below

In the subsequent articles, we will share more topics and advanced techniques. Stay tuned!

Written By

Submit a Comment

Your email address will not be published. Required fields are marked *


This is our first blog post on Ruby Cucumber automation testing and as an automation testing services company, we would like to share basic and advanced techniques of automation testing with software testing & quality assurance communities.

In this article, we will show you how to create a feature file and implementation code using RubyMine. Before following up the below steps, make sure you have already configured RubyMine

Step1-Create Empty Ruby Project

File->New Project

Step2-Create Gem file

Select project directory, right click and click New->File

Create Gem file with the following Gem details as shown below.

Note: These Gem details will be published in our next article.

source 'http://rubygems.org'
gem 'cucumber', '1.2.1'
gem 'rspec', '2.10.0'
gem 'ffi', '1.3.1'
gem 'watir-webdriver', '0.7.0'
gem 'watir'
gem 'selenium-webdriver'
gem 'headless', '0.2.2'
gem 'titleize', '1.2.1'
gem 'json', '1.7.7'
gem 'gherkin', '<= 2.11.6'
gem 'syntax'
  

Step3-Directory Structure

Create sub folders as shown below

—>features

————->Project1

——————->feature

——————->pages

——————->step_definitions

————->Support

Step4-Create Shared Driver

Create SharedDriver.rb inside Support folder with the following code.

require 'rubygems'
require 'rspec'
require 'watir-webdriver'

include Selenium

#Creating Remote WebDriver
browser = Watir::Browser.new(:remote, :url => "http://SauceUsername:[email protected]:80/wd/hub",
                              :desired_capabilities => WebDriver::Remote::Capabilities.firefox)
#If you want to run it locally, use Watir::Browser.new :firefox
							  
Before do
  @browser = browser
end
  

Step5-Create Feature file

Create sample.feature file inside feature folder with the below steps

Feature: Sample Feature

  Scenario: Sample Scenario
    Given I launch https://codoid.com
    And I click on Login tab
    And I enter username
    And I enter password
    When I click Login button
    Then I see Home page
  

Step6-Create Step Definitions

Create Step Definitions with pending steps

Given(/^I launch http://www.codoid.com$/) do
  pending
end

And(/^I click on Login tab$/) do
  pending
end

And(/^I enter username$/) do
  pending
end

And(/^I enter password$/) do
  pending
end

When(/^I click Login button$/) do
  pending
end

Then(/^I see Home page$/) do
  pending
end
  

Step7-Create Page Object

class LoginPage
  attr_accessor :loginTab,:txtUsername,:txtPassword,:btnLogin

  def initialize(browser)
    @browser = browser
    @loginTab    = @browser.a(:text => "Login")
    @txtUsername = @browser.text_field(:id => "userId")
    @txtPassword = @browser.text_field(:id => "password")
    @btnLogin      = @browser.element(:id => "log_in_button")
  end

  def visit
    @browser.goto "https://codoid.com"
  end

  def clickLoginTab()
    @loginTab.click
  end

  def enterUsername(username)
    @txtUsername.set username
  end

  def enterPassword(password)
    @txtPassword.set password
  end

  def clickLoginButton
    @btnLogin.click
  end

  def verifyHomePageHeader()
    @browser.element(:text => "Dashboard").wait_until_present
  end
end
  

Step8-Call Page Methods in Step Definitions

Given(/^I launch http://www.codoid.com$/) do
  @LoginPage = LoginPage.new(@browser)
  @LoginPage.visit
end

And(/^I click on Login tab$/) do
  @LoginPage.clickLoginTab
end

And(/^I enter username$/) do
  @LoginPage.enterUsername("xxxxxxx")
end

And(/^I enter password$/) do
  @LoginPage.enterPassword("yyyyyyy")
end

When(/^I click Login button$/) do
  @LoginPage.clickLoginButton
end

Then(/^I see Home page$/) do
  @LoginPage.verifyHomePageHeader
end
  

Step9-Create cucumber.yml file

Create cucumber.yml file inside project directory as shown below

default: --format html --out=Report.html
  

Step10-Run the feature file


Once execution is done, open the report file


You will see the report as shown below

In the subsequent articles, we will share more topics and advanced techniques. Stay tuned!