Here in below code, we are using Cucumber as BDD tool, Testng as TDD tool and selenium to automate web pages.
| Component | Purpose |
|---|---|
| Cucumber | BDD framework (Gherkin syntax) |
| TestNG | Test execution and configuration (alternative to JUnit) |
| Selenium | Automating browser actions |
Project Setup Using Maven
- Add below dependencies in pom.xml
<dependencies> <!-- Selenium --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.20.0</version> </dependency> <!-- Cucumber --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>7.14.0</version> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-testng</artifactId> <version>7.14.0</version> </dependency> <!-- TestNG --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.10.2</version> <scope>test</scope> </dependency> </dependencies>
1. Login.feature : It is cucumber file to write plain english scenario using gherkin keywords under feature.
Feature: Login functionality Scenario: Successful login Given User is on the login page When User enters username and password And User clicks login Then User should see the home page
3. LoginSteps.java
package stepdefinitions; import io.cucumber.java.en.*; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import pages.LoginPage; public class LoginSteps { WebDriver driver; LoginPage loginPage; @Given("User is on the login page") public void openLoginPage() { driver = new ChromeDriver(); driver.get("https://example.com/login"); loginPage = new LoginPage(driver); } @When("User enters username and password") public void enterCredentials() { loginPage.enterUsername("testuser"); loginPage.enterPassword("testpass"); } @When("User clicks login") public void clickLogin() { loginPage.clickLogin(); } @Then("User should see the home page") public void verifyHomePage() { String title = driver.getTitle(); assert title.contains("Home"); driver.quit(); } }
4. TestNGCucumberRunner.java
package runners; import io.cucumber.testng.AbstractTestNGCucumberTests; import io.cucumber.testng.CucumberOptions; @CucumberOptions( features = "src/test/java/features", glue = "stepdefinitions", plugin = {"pretty", "html:target/cucumber-report.html"}, monochrome = true ) public class TestNGCucumberRunner extends AbstractTestNGCucumberTests { }
5. Run the Test
Right-click on TestNGCucumberRunner.java → Run as TestNG Test
Summary
| Tool | Role |
|---|---|
| Cucumber | Gherkin syntax BDD testing |
| TestNG | Advanced test configuration and reporting |
| Selenium | Web automation |