'Cucumber cannot find StepDefinitions while running the code but manually using the option "Find Step" can find step definition

In the project Structure defined like below,

  • src/main/java -- Config (RunCukesTest.java) -- StepDefinitions
  • src/test/resources -- features/loginenter image description here

When I run from RunCukesTest.java using RunAs --> JUnit Test, Step Definitions cannot be found by runner

When I click find Step, opens the right file. Couldn't understand where the issue is because the code was running few days back. File is downloaded from here

https://drive.google.com/open?id=0B4SgyzyvwKhiVTRmRDZuNXNTSjA

Runner class code

package helpers;

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
//features= "src/test/resources/features/navigation",

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"classpath:features"},
        plugin = {"pretty", "html:target/cucumber-html-report"},
        tags = {"@OnlyOneTime"},
//      dryRun = true,
        monochrome = true
        )
public class RunCukesTest{

}


Solution 1:[1]

Glue code is supposed to have path to hooks and step definitions

So modified as glue={"helpers","stepDefinitions"} instead of glue={"helpers","classpath/stepDefinitions", "classpath/stepDefinitions.LogIn","classpath/stepDefinitions.Publish"}

Please refer to this link Similar issue on github

Solution 2:[2]

Running it as a Cucumber feature, it works well, but if I provide glue={"stepDefinitions"} and try running it from runner then NullPointerException is thrown,

This problem is arising from hooks not being found. But If I move @Before and @After to the SDLogin classs, then It works well.

Solution 3:[3]

I figured out your issue, As per your runner class, the glue path is not set. please set glue path.glue={"stepDefinitions"}

package helpers; 
import org.junit.runner.RunWith; 
import cucumber.api.CucumberOptions; 
import cucumber.api.junit.Cucumber; 
//features= "src/test/resources/features"@RunWith(Cucumber.class) @CucumberOptions( 
features = {"classpath:features"}, glue={"stepDefinitions"},plugin = {"pretty", "html:target/cucumber-html-report"}, tags = {"@OnlyOneTime"}, // dryRun = true, monochrome = true ) 
public class RunCukesTest{ }

Solution 4:[4]

In my case , feature files are in src/test/resources/Features/login.feature Step definitions are in com.steps.definitions

So giving like below solved the issue.

import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resources/Features/login.feature"}, glue={"com.steps.definitions"},plugin = {"pretty", "html:target/cucumber-html-report"})
public class TestRunner {
}

Here is the folder/package structure. enter image description here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nagarjuna Reddy
Solution 2 Kushal Bhalaik
Solution 3 Mahipal
Solution 4 Sameera De Silva