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
- ✓Step text must exactly match feature file (case-sensitive)
- ✓One step definition class per feature area (recommended)
- ✓Use
@Before/@Afterhooks in a separateHooks.java - ✓Glue path in TestRunner must point to step definition package
