BDD-Driven Automation Framework using Cucumber and Selenium

BDD-Driven Automation Framework using Cucumber and Selenium

 Basic structure of a Page Object Model (POM) framework using Selenium, Java, and Cucumber. This includes the essential folders and files you’d typically use to get started.

Project Structure


🧱 1. pom.xml (Dependencies)

XML

<project xmlns="http://maven.apache.org/POM/4.0.0"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

         http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>SeleniumCucumberPOM</groupId>

    <artifactId>SeleniumCucumberPOM</artifactId>

    <version>1.0-SNAPSHOT</version>

 

    <dependencies>

        <!-- Selenium -->

        <dependency>

            <groupId>org.seleniumhq.selenium</groupId>

            <artifactId>selenium-java</artifactId>

            <version>4.19.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>

        </dependency>

 

        <!-- JUnit -->

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.13.2</version>

            <scope>test</scope>

        </dependency>

 

        <!-- WebDriver Manager -->

        <dependency>

            <groupId>io.github.bonigarcia</groupId>

            <artifactId>webdrivermanager</artifactId>

            <version>5.8.0</version>

        </dependency>

    </dependencies>

 

    <build>

        <plugins>

            <!-- Maven Compiler -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.10.1</version>

                <configuration>

                    <source>11</source>

                    <target>11</target>

                </configuration>

            </plugin>

 

            <!-- Maven Surefire Plugin for Cucumber -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-surefire-plugin</artifactId>

                <version>3.2.5</version>

            </plugin>

        </plugins>

    </build>

</project>


💻 2. Sample Page Class (POM) - LoginPage.java

java

package pages;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

 

public class LoginPage {

    private WebDriver driver;

 

    // Locators

    private By username = By.id("username");

    private By password = By.id("password");

    private By loginBtn = By.id("loginBtn");

 

    // Constructor

    public LoginPage(WebDriver driver) {

        this.driver = driver;

    }

 

    // Actions

    public void enterUsername(String user) {

        driver.findElement(username).sendKeys(user);

    }

 

    public void enterPassword(String pass) {

        driver.findElement(password).sendKeys(pass);

    }

 

    public void clickLogin() {

        driver.findElement(loginBtn).click();

    }

}

🔧 3. DriverFactory - DriverFactory.java

java

package utils;

 

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

 

public class DriverFactory {

    public static WebDriver driver;

 

    public static WebDriver initDriver() {

        WebDriverManager.chromedriver().setup();

        driver = new ChromeDriver();

        return driver;

    }

 

    public static WebDriver getDriver() {

        return driver;

    }

}


📜 4. Feature File - login.feature

gherkin

Feature: Login functionality

 

  Scenario: Successful login with valid credentials

    Given user is on login page

    When user enters valid username and password

    And clicks on login button

    Then user should land on home page

🧾 5. Step Definition - LoginSteps.java

java

package stepdefinitions;

 

import io.cucumber.java.en.*;

import org.openqa.selenium.WebDriver;

import pages.LoginPage;

import utils.DriverFactory;

 

public class LoginSteps {

 

    WebDriver driver;

    LoginPage loginPage;

 

    @Given("user is on login page")

    public void user_is_on_login_page() {

        driver = DriverFactory.initDriver();

        driver.get("https://example.com/login");

        loginPage = new LoginPage(driver);

    }

 

    @When("user enters valid username and password")

    public void user_enters_valid_credentials() {

        loginPage.enterUsername("testuser");

        loginPage.enterPassword("testpass");

    }

 

    @And("clicks on login button")

    public void clicks_on_login_button() {

        loginPage.clickLogin();

    }

 

    @Then("user should land on home page")

    public void user_should_land_on_home_page() {

        // Add assertion or check title

    }

}

🚀 6. Test Runner - TestRunner.java

java

package runners;

 

import org.junit.runner.RunWith;

import io.cucumber.junit.Cucumber;

import io.cucumber.junit.CucumberOptions;

 

@RunWith(Cucumber.class)

@CucumberOptions(

    features = "src/test/java/features",

    glue = {"stepdefinitions"},

    plugin = {"pretty", "html:target/cucumber-reports"},

    monochrome = true

)

public class TestRunner {

}


Let me know if you want me to help you set up a full project zip or want to extend this with hooks, reporting, or assertions!

Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.
https://otieu.com/4/9433883
https://otieu.com/4/9433883