</>

Technology

Cucumber

Difficulty

Beginner

Interview Question

What is the purpose of the Step Definition file in Cucumber?

Answer

Step Definition File in Cucumber

A Step Definition file contains Java methods annotated with @Given, @When, @Then that map to the natural language steps written in the feature file. It bridges the gap between plain English scenarios and executable automation code.

How Mapping Works

CODE
Feature file step:
  "When the user enters username "admin" and password "Admin@123""

Step Definition method:
  @When("the user enters username {string} and password {string}")
  public void enterCredentials(String username, String password) {
      loginPage.enterUsername(username);
      loginPage.enterPassword(password);
  }

Complete Step Definition Example

Java
package stepDefinitions;

import io.cucumber.java.en.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import pages.LoginPage;
import static org.testng.Assert.*;

public class LoginSteps {

    WebDriver driver;
    LoginPage loginPage;

    @Given("the user is on the login page")
    public void navigateToLoginPage() {
        driver = new ChromeDriver();
        driver.get("https://example.com/login");
        loginPage = new LoginPage(driver);
    }

    @When("the user enters username {string} and password {string}")
    public void enterCredentials(String username, String password) {
        loginPage.enterUsername(username);
        loginPage.enterPassword(password);
    }

    @When("the user clicks the Login button")
    public void clickLogin() {
        loginPage.clickLoginButton();
    }

    @Then("the user should be redirected to the dashboard")
    public void verifyDashboard() {
        assertTrue(driver.getTitle().contains("Dashboard"));
    }

    @After
    public void tearDown() {
        if (driver != null) driver.quit();
    }
}

Cucumber Expressions vs Regex

Java
// Cucumber Expression (recommended, simpler)
@When("the user enters {string} into the {string} field")
public void enterText(String value, String field) { }

// Regex (more powerful)
@When("^the user enters \"([^\"]*)\" into the \"([^\"]*)\" field$")
public void enterText(String value, String field) { }

File Location

CODE
src/
  test/
    java/
      stepDefinitions/
        LoginSteps.java
        RegistrationSteps.java
      hooks/
        Hooks.java

Key Rules

  1. Step text must exactly match feature file (case-sensitive)
  2. One step definition class per feature area (recommended)
  3. Use @Before / @After hooks in a separate Hooks.java
  4. Glue path in TestRunner must point to step definition package

Follow AutomateQA

Related Topics