Implementing Hooks in Selenium Java Cucumber Tests

In Selenium automation testing with Cucumber and Java, hooks play a vital role in managing pre-test and post-test conditions. They allow testers to execute specific blocks of code before or after each scenario or step. This helps streamline repetitive tasks like browser setup, login sessions, test data cleanup, and reporting. In this blog, we’ll explore how to implement hooks in Selenium Java Cucumber tests, and how they enhance test efficiency and maintainability.


What Are Hooks in Cucumber?

Hooks are blocks of code that are triggered automatically before or after a scenario. Cucumber provides two main types of hooks:

@Before – Runs before each scenario.

@After – Runs after each scenario.

They are defined in a separate class, typically annotated with @Before and @After, and are used to control the test environment setup and teardown.


Why Use Hooks?

Hooks make test automation frameworks cleaner and more modular. Common uses include:

Launching and closing the browser

Initializing and tearing down test data

Capturing screenshots on failure

Logging and reporting


Setting Up Selenium with Cucumber

Before implementing hooks, ensure your Selenium-Cucumber setup is ready. Include the necessary dependencies in your pom.xml:

xml


<dependencies>

    <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>

    <dependency>

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

        <artifactId>selenium-java</artifactId>

        <version>4.15.0</version>

    </dependency>

</dependencies>

Implementing Hooks

Create a new class called Hooks.java in your step definitions package.


java


package stepDefinitions;


import io.cucumber.java.After;

import io.cucumber.java.Before;

import org.openqa.selenium.WebDriver;

import utilities.DriverFactory;


public class Hooks {


    WebDriver driver;


    @Before

    public void setUp() {

        System.out.println("Launching browser...");

        driver = DriverFactory.getDriver();

        driver.manage().window().maximize();

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

    }


    @After

    public void tearDown() {

        System.out.println("Closing browser...");

        driver.quit();

    }

}

In this example, DriverFactory is a utility class to initialize WebDriver based on the browser type.


Using Conditional Hooks with Tags

You can run hooks conditionally using scenario tags:


java
@Before("@SmokeTest")
public void smokeSetup() {
    System.out.println("Setup for smoke test only");
}

This hook will run only for scenarios tagged with @SmokeTest.


Capturing Screenshots with Hooks

You can enhance the @After hook to capture screenshots on failure:


java


import io.cucumber.java.Scenario;

import org.openqa.selenium.OutputType;

import org.openqa.selenium.TakesScreenshot;


@After

public void tearDown(Scenario scenario) {

    if (scenario.isFailed()) {

        byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);

        scenario.attach(screenshot, "image/png", scenario.getName());

    }

    driver.quit();

}

This improves debugging and reporting in CI/CD pipelines or test reports.


Conclusion

Hooks in Selenium Java Cucumber provide a powerful way to manage test lifecycles effectively. By using @Before and @After annotations, you can eliminate boilerplate setup and teardown code, improve test structure, and increase automation reliability. Whether you're running a few tests or a large test suite, hooks help you maintain consistency and robustness throughout your testing framework.


Learn Selenium with Java Training

Read More: Data Tables in Cucumber for Selenium Java Automation

Read More: Mapping Step Definitions in Selenium Java Cucumber Framework

Read More: Writing Feature Files for Selenium Java with Cucumber


Visit Our IHUB Talent Institute Hyderabad
Get Direction 

Comments

Popular posts from this blog

How to Use Tosca's Test Configuration Parameters

Tosca Licensing: Types and Considerations

Using Hibernate ORM for Fullstack Java Data Management