Search code examples
seleniumselenium-webdrivercucumbercucumber-jvmcucumber-java

Cucumber JVM: Run Tagged hooks before global hook


I am using cucumber JVM for selenium Tests. I have a few Test cases to register the user and after each test I want to delete the user.

And so I have created a new tagged hook which I am using for these tests. as mentioned below

The problem is Gloabl hook tearDown runs before tagged hook deleteUser which closed the browser and so I can't run steps to delete the user.

is there any way I can run deleteUser before tearDown as part of hooks.

@After
public void tearDown(Scenario scenario){
    System.out.println("teardown");  
    closeDriver();
}

@After("@deleteNewUser")
public void deleteUser(){
    System.out.println("deleteUser");
 }

This is how I am using these hooks

@deleteNewUser
Scenario: Register user
  Given New User is registered

Output

teardown

deleteUser


Solution

  • Use the order attribute on the After hook. The highest value of order will be executed first. Reverse for Before hook.

    @After(order=5)
    public void tearDown(Scenario scenario){
        System.out.println("teardown");  
        closeDriver();
    }
    
    @After("@deleteNewUser", order=10)
    public void deleteUser(){
        System.out.println("deleteUser");
     }