Hooks

Before and After Hooks

Hooks run before and after every scenario: start the browser, quit it, take a screenshot when a scenario fails. They live in a class inside the glue package.

import io.cucumber.java.*;

public class Hooks {

    @Before(order = 0)
    public void startBrowser() {
        DriverFactory.initDriver(ConfigReader.get("browser"), ConfigReader.getBoolean("headless"));
    }

    @Before(value = "@loggedIn", order = 1)          // only for scenarios tagged @loggedIn
    public void loginFirst() {
        new LoginPage(DriverFactory.getDriver()).open().loginAs("[email protected]", "Secret@123");
    }

    @After
    public void tearDown(Scenario scenario) {
        if (scenario.isFailed()) {
            byte[] png = ((TakesScreenshot) DriverFactory.getDriver()).getScreenshotAs(OutputType.BYTES);
            scenario.attach(png, "image/png", scenario.getName());
        }
        DriverFactory.quitDriver();
    }
}

Hook Order

@Before(order=0)  startBrowser
@Before(order=1)  loginFirst        (only @loggedIn scenarios)
   Background steps
   Scenario steps   Given -> When -> Then
@AfterStep        (optional: screenshot after every step)
@After            tearDown: attach screenshot if failed, quit browser

Tip: Do not put business steps in hooks except simple setup like login. A reader of the feature file should see what the scenario does.