Simple Cucumber UI Automation Framework with TestNG

Rashmi Nagarahalli
2 min readJan 7, 2024

Creating a simple Cucumber UI automation framework with TestNG involves combining the capabilities of Cucumber and TestNG for behavior-driven development (BDD) and test execution. Below is a basic example using Java, Cucumber, Selenium WebDriver, and TestNG.

Dependencies (Maven — pom.xml):

<dependencies>
<! — Cucumber →
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.2.5</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>7.2.5</version>
<scope>test</scope>
</dependency>

<! — TestNG →
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.3.0</version>
</dependency>

<! — Selenium →
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
</dependencies>

Feature File (src/test/resources/features/sample.feature):

Feature: Sample Feature

Scenario: Open Google and perform a search
Given I open Google
When I search for “Cucumber Selenium”
Then the search results page is displayed

Step Definitions (src/test/java/stepdefinitions/StepDefinitions.java):

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;

import static org.junit.Assert.assertTrue;

public class StepDefinitions {
private WebDriver driver;

@Given(“I open Google”)
public void iOpenGoogle() {
System.setProperty(“webdriver.chrome.driver”, “path/to/chromedriver”);
driver = new ChromeDriver();
driver.get(“https://www.google.com”);
}

@When(“I search for {string}”)
public void iSearchFor(String query) {
driver.findElement(By.name(“q”)).sendKeys(query);
driver.findElement(By.name(“q”)).submit();
}

@Then(“the search results page is displayed”)
public void searchResultsPageIsDisplayed() {
assertTrue(driver.getTitle().contains(“Google Search”));
driver.quit();
}
}

Test Runner (src/test/java/runners/TestRunner.java):

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

@CucumberOptions(
features = “src/test/resources/features”,
glue = “stepdefinitions”,
plugin = {“pretty”, “html:target/cucumber-reports”}
)
public class TestRunner extends AbstractTestNGCucumberTests{
}

TestNG XML File (testng.xml):

<!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd">
<suite name=”CucumberSuite”>
<test name=”CucumberTest”>
<classes>
<class name=”runners.TestRunner”/>
</classes>
</test>
</suite>

Run Tests:

Execute the TestNG XML file (testng.xml) to run your Cucumber tests with TestNG.

This example demonstrates a basic setup using Cucumber with TestNG. Adjust paths, dependencies, and configurations as needed for your specific environment.

For Junit use the following testrunner class:

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

@RunWith(Cucumber.class)
@CucumberOptions(
features = “src/test/resources/features”,
glue = “stepdefinitions”,
plugin = {“pretty”, “html:target/cucumber-reports”}
)
public class TestRunner {
}

--

--