Cucumber - Annotations

Annotation is a predefined text, which holds a specific meaning. It lets the compiler/interpreter know, what should be done upon execution. Cucumber has got the following few annotations −
Given −

It describes the pre-requisite for the test to be executed.
Example − GIVEN I am a Facebook user

Given −
It describes the pre-requisite for the test to be executed.
It describes the pre-requisite for the test to be executed.
Example − GIVEN I am a Facebook user
Example − GIVEN I am a Facebook user
When −

It defines the trigger point for any test scenario execution.
Example − WHEN I enter "<username>"

When −
It defines the trigger point for any test scenario execution.
It defines the trigger point for any test scenario execution.
Example − WHEN I enter "<username>"
Example − WHEN I enter "<username>"
Then −

Then holds the expected result for the test to be executed.
Example − THEN login should be successful.

Then −
Then holds the expected result for the test to be executed.
Then holds the expected result for the test to be executed.
Example − THEN login should be successful.
Example − THEN login should be successful.
And −

It provides the logical AND condition between any two statements. AND can be used in conjunction with GIVEN, WHEN and THEN statement.
Example − WHEN I enter my "<username>" AND I enter my "<password>"

And −
It provides the logical AND condition between any two statements. AND can be used in conjunction with GIVEN, WHEN and THEN statement.
It provides the logical AND condition between any two statements. AND can be used in conjunction with GIVEN, WHEN and THEN statement.
Example − WHEN I enter my "<username>" AND I enter my "<password>"
Example − WHEN I enter my "<username>" AND I enter my "<password>"
But −

It signifies logical OR condition between any two statements. OR can be used in conjunction with GIVEN, WHEN and THEN statement.
Example − THEN login should be successful. BUT home page should not be missing.

But −
It signifies logical OR condition between any two statements. OR can be used in conjunction with GIVEN, WHEN and THEN statement.
It signifies logical OR condition between any two statements. OR can be used in conjunction with GIVEN, WHEN and THEN statement.
Example − THEN login should be successful. BUT home page should not be missing.
Example − THEN login should be successful. BUT home page should not be missing.
Scenario −

Details about the scenario under the test needs to be captured after the keyword “Scenario:”
Example −
Scenario:
GIVEN I am a Facebook user
WHEN I enter my
AND I enter my
THEN login should be successful.
BUT home page should not be missing.

Scenario −
Details about the scenario under the test needs to be captured after the keyword “Scenario:”
Details about the scenario under the test needs to be captured after the keyword “Scenario:”
Example −
Scenario:
GIVEN I am a Facebook user
WHEN I enter my
AND I enter my
THEN login should be successful.
BUT home page should not be missing.
Example −
Scenario:
GIVEN I am a Facebook user
WHEN I enter my
AND I enter my
THEN login should be successful.
BUT home page should not be missing.
Scenario Outline − (To be covered later)
Scenario Outline − (To be covered later)
Examples − (To be covered later)
Examples − (To be covered later)
Background −

Background generally has the instruction on what to setup before each scenario runs. However, it gets executed after “Before” hook (to be covered later). So this is ideal to be used for code when we want to set up the web-browser or we want to establish the database connectivity.

Example −
Background:
Go to Facebook home page.


Background −
Background generally has the instruction on what to setup before each scenario runs. However, it gets executed after “Before” hook (to be covered later). So this is ideal to be used for code when we want to set up the web-browser or we want to establish the database connectivity.

Example −
Background:
Go to Facebook home page.

Background generally has the instruction on what to setup before each scenario runs. However, it gets executed after “Before” hook (to be covered later). So this is ideal to be used for code when we want to set up the web-browser or we want to establish the database connectivity.
Example −
Background:
Go to Facebook home page.
Example −
Background:
Go to Facebook home page.
Let’s automate a scenario in order to understand annotations better.
Step 1
Create a Maven Test Project named as AnnotationTest.
Go to File → New → Others → Maven → Maven Project → Next.
Go to File → New → Others → Maven → Maven Project → Next.
Provide group Id (group Id will identify your project uniquely across all projects).
Provide group Id (group Id will identify your project uniquely across all projects).
Provide artifact Id (artifact Id is the name of the jar without version. You can choose any name which is in lowercase).
Provide artifact Id (artifact Id is the name of the jar without version. You can choose any name which is in lowercase).
Click on Finish.
Click on Finish.
Open pom.xml −

Go to package explorer on the left hand side of Eclipse.
Expand the project AnnotationTest.
Locate pom.xml file.
Right-click and select the option, Open with “Text Editor”.

Open pom.xml −
Go to package explorer on the left hand side of Eclipse.
Go to package explorer on the left hand side of Eclipse.
Expand the project AnnotationTest.
Expand the project AnnotationTest.
Locate pom.xml file.
Locate pom.xml file.
Right-click and select the option, Open with “Text Editor”.
Right-click and select the option, Open with “Text Editor”.
Add dependency for Selenium − This will indicate Maven, which Selenium jar files are to be downloaded from the central repository to the local repository.

Open pom.xml is in edit mode, create dependencies tag (<dependencies></dependencies>), inside the project tag.
Inside the dependencies tag, create dependency tag (<dependency></dependency>).
Provide the following information within the dependency tag.

Add dependency for Selenium − This will indicate Maven, which Selenium jar files are to be downloaded from the central repository to the local repository.
Open pom.xml is in edit mode, create dependencies tag (<dependencies></dependencies>), inside the project tag.
Open pom.xml is in edit mode, create dependencies tag (<dependencies></dependencies>), inside the project tag.
Inside the dependencies tag, create dependency tag (<dependency></dependency>).
Inside the dependencies tag, create dependency tag (<dependency></dependency>).
Provide the following information within the dependency tag.
Provide the following information within the dependency tag.
<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
Add dependency for Cucumber-Java − This will indicate Maven, which Cucumber files are to be downloaded from the central repository to the local repository.

Create one more dependency tag.
Provide following information within the dependency tag.

Add dependency for Cucumber-Java − This will indicate Maven, which Cucumber files are to be downloaded from the central repository to the local repository.
Create one more dependency tag.
Create one more dependency tag.
Provide following information within the dependency tag.
Provide following information within the dependency tag.
<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
Add dependency for Cucumber-JUnit − This will indicate Maven, which Cucumber JUnit files are to be downloaded from the central repository to the local repository.

Create one more dependency tag.
Provide the following information within the dependency tag.

Add dependency for Cucumber-JUnit − This will indicate Maven, which Cucumber JUnit files are to be downloaded from the central repository to the local repository.
Create one more dependency tag.
Create one more dependency tag.
Provide the following information within the dependency tag.
Provide the following information within the dependency tag.
<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
Add dependency for JUnit − This will indicate Maven, which JUnit files are to be downloaded from the central repository to the local repository.

Create one more dependency tag.
Provide the following information within the dependency tag.

Add dependency for JUnit − This will indicate Maven, which JUnit files are to be downloaded from the central repository to the local repository.
Create one more dependency tag.
Create one more dependency tag.
Provide the following information within the dependency tag.
Provide the following information within the dependency tag.
<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
Verify binaries.

Once pom.xml is edited successfully, save it.
Go to Project → Clean − It will take a few minutes.

Verify binaries.
Once pom.xml is edited successfully, save it.
Once pom.xml is edited successfully, save it.
Go to Project → Clean − It will take a few minutes.
Go to Project → Clean − It will take a few minutes.
Step 2
Create a package named Annotation under src/test/java
Select the newly created project.
Select the newly created project.
Right-click and select ‘New’.
Right-click and select ‘New’.
Select option as ‘Package’.
Select option as ‘Package’.
Name it as ‘Annotation’.
Name it as ‘Annotation’.
Save it.
Save it.
Step 3
Create a feature file named annotation.feature.
Select and right-click on the package outline.
Select and right-click on the package outline.
Click on ‘New’ file.
Click on ‘New’ file.
Give the file a name such as outline.feature.
Give the file a name such as outline.feature.
Write the following text within the file and save it.
Write the following text within the file and save it.
Feature: annotation 
#This is how background can be used to eliminate duplicate steps 

Background: 
   User navigates to Facebook Given 
   I am on Facebook login page 

#Scenario with AND 
Scenario: 
   When I enter username as "TOM"
   And I enter password as "JERRY" 
   Then Login should fail 

#Scenario with BUT 
Scenario: 
   When I enter username as "TOM" 
   And I enter password as "JERRY" 
   Then Login should fail 
   But Relogin option should be available

Step 4
Create a step definition file.
Select and right-click on the package outline.
Select and right-click on the package outline.
Click on ‘New’ file.
Click on ‘New’ file.
Give the file name as annotation.java
Give the file name as annotation.java
Write the following text within the file and save it.
Write the following text within the file and save it.
package Annotation; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class annotation { 
   WebDriver driver = null; 
   @Given("^I am on Facebook login page$") 
	
   public void goToFacebook() { 
      driver = new FirefoxDriver(); 
      driver.navigate().to("https://www.facebook.com/"); 
   }
	
   @When("^I enter username as \"(.*)\"$") 
   public void enterUsername(String arg1) {   
      driver.findElement(By.id("email")).sendKeys(arg1); 
   }
	
   @When ("^I enter password as \"(.*)\"$") 
   public void enterPassword(String arg1) {
      driver.findElement(By.id("pass")).sendKeys(arg1);
      driver.findElement(By.id("u_0_v")).click(); 
   } 
	
   @Then("^Login should fail$") 
   public void checkFail() {  
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test1 Pass"); 
      } else { 
         System.out.println("Test1 Failed"); 
      } 
      driver.close(); 
   }
	
   @Then("^Relogin option should be available$") 
   public void checkRelogin() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test2 Pass"); 
      } else { 
         System.out.println("Test2 Failed"); 
      } 
      driver.close(); 
   }
} 
Step 5
Create a runner class file.
Select and right-click on the package outline.
Select and right-click on the package outline.
Click on ‘New’ file.
Click on ‘New’ file.
Give the file a name, such as runTest.java
Give the file a name, such as runTest.java
Write the following text within the file and save it.
Write the following text within the file and save it.
package Annotation; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 

public class runTest { }
Step 6
Run the test using option −
Select runTest.java file from the package explorer.
Select runTest.java file from the package explorer.
Right-click and select the option ‘Run as’
Right-click and select the option ‘Run as’
Select JUnit test.
Select JUnit test.
You will observe the following things when you run this class file −
Facebook opens in a new Firefox web-browser instance.
Facebook opens in a new Firefox web-browser instance.
TOM will be passed as an input to the username field.
TOM will be passed as an input to the username field.
JERRY will be passed as an input to the password field.
JERRY will be passed as an input to the password field.
Login will be clicked.
Login will be clicked.
Message will be displayed on the browser regarding unsuccessful login.
Message will be displayed on the browser regarding unsuccessful login.
In the console, you will see “Test Pass” printed
In the console, you will see “Test Pass” printed
Step result 1. to 5. Will be re-executed for username as "" and password as "".
Step result 1. to 5. Will be re-executed for username as "" and password as "".
 Print
 Add Notes
 Bookmark this page