Hooks in Cucumber Framework

Hooks are special code blocks that run before and/or after each scenario or step in a feature file. They are used for test setup, cleanup, or any repeated action across scenarios. Hooks help reduce code duplication and improve code maintainability.

Hooks are commonly used for:

     Opening and closing a browser
     Navigating to a default page
     Setting or clearing cookies
     Creating or cleaning test data
     Connecting or disconnecting from a database
     Taking screenshots on failure
     Logging or reporting actions

Types of Hooks in Cucumber

Cucumber provides two levels of hooks:

Scenario Hooks

@Before: Runs before each scenario

@After: Runs after each scenario

Step Hooks

@BeforeStep: Runs before each step

@AfterStep: Runs after each step

Typical Use Cases for Hooks

Hook Type

Common Use Cases

@Before

Open browser

Setup data

Navigate to app

@After

Close browser

Delete test data

Logout

@BeforeStep

Log step start

Initialize per-step setup

@AfterStep

Take screenshots

Validate UI status


Hooks usually places in src > test> java > utils > Hooks.java

Here is the example Hooks.java

package test.utils;
import io.cucumber.java.*;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
public class Hooks {
    public static WebDriver driver;
    @Before
    public void setUp(Scenario scenario) {
        System.out.println("==[ Before Scenario: " + scenario.getName() + " ]==");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
    }
    @After
    public void tearDown(Scenario scenario) {
        System.out.println("==[ After Scenario: " + scenario.getName() + " ]==");
        // Take screenshot on failure
        if (scenario.isFailed()) {
            TakesScreenshot ts = (TakesScreenshot) driver;
            byte[] screenshot = ts.getScreenshotAs(OutputType.BYTES);
            scenario.attach(screenshot, "image/png", "Failure Screenshot");
        }
        driver.quit();
    }
    @BeforeStep
    public void beforeEachStep(Scenario scenario) {
        System.out.println(">> Before Step in: " + scenario.getName());
    }
    @AfterStep
    public void afterEachStep(Scenario scenario) {
        System.out.println("<< After Step in: " + scenario.getName());
    }
}
 

 

 

Related Tutorials