To convert a Selenium test into a Cucumber BDD test, you need to follow a structured approach where the test scenarios are written in Gherkin syntax (in .feature files) and the test logic is implemented using step definitions that internally use Selenium WebDriver.
Steps to Convert Selenium Test to Cucumber BDD
Step 1: Traditional Selenium Test (Without Cucumber)
Here is a simple Selenium test in Java:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class LoginTest { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get("https://example.com/login"); WebElement username = driver.findElement(By.id("username")); WebElement password = driver.findElement(By.id("password")); WebElement loginButton = driver.findElement(By.id("login")); username.sendKeys("admin"); password.sendKeys("admin123"); loginButton.click(); String expectedUrl = "https://example.com/dashboard"; assert driver.getCurrentUrl().equals(expectedUrl); driver.quit(); } }
Step 2: Add Cucumber and Selenium Dependencies in
pom.xml
<dependencies> <!-- Selenium --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.21.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-junit</artifactId> <version>7.14.0</version> <scope>test</scope> </dependency> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies>
Step 3: Create Feature File (Gherkin)
src/test/resources/features/login.feature
Feature: Login Functionality Scenario: Valid login Given user is on login page When user enters valid username and password And clicks on login button Then user should be redirected to dashboard page
Step 4: Create Step Definition File
src/test/java/stepDefinitions/LoginSteps.java
package stepDefinitions; import io.cucumber.java.en.*; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; public class LoginSteps { WebDriver driver; @Given("user is on login page") public void user_is_on_login_page() { driver = new ChromeDriver(); driver.get("https://example.com/login"); } @When("user enters valid username and password") public void user_enters_valid_username_and_password() { driver.findElement(By.id("username")).sendKeys("admin"); driver.findElement(By.id("password")).sendKeys("admin123"); } @When("clicks on login button") public void clicks_on_login_button() { driver.findElement(By.id("login")).click(); } @Then("user should be redirected to dashboard page") public void user_should_be_redirected_to_dashboard_page() { String expectedUrl = "https://example.com/dashboard"; String actualUrl = driver.getCurrentUrl(); if (!actualUrl.equals(expectedUrl)) { throw new AssertionError("Login failed: URL mismatch"); } driver.quit(); } }
Step 5: Create Test Runner Class
src/test/java/testRunner/TestRunner.java
package testRunner; import org.junit.runner.RunWith; import io.cucumber.junit.Cucumber; import io.cucumber.junit.CucumberOptions; @RunWith(Cucumber.class) @CucumberOptions( features = "src/test/resources/features", glue = "stepDefinitions", plugin = {"pretty", "html:target/cucumber-report.html"}, monochrome = true ) public class TestRunner { }
Benefits of Converting to Cucumber BDD
Readable Scenarios: Easier for non-developers to understand.
Collaboration: Better collaboration between QA, Dev, and Business.
Reusable Steps: Step definitions can be reused across features.
Reports: HTML reports can be generated for analysis.
No comments:
Post a Comment