Simple Cucumber UI Automation Framework with TestNG
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 {
}