Cucumber测试运行时反复触发io.cucumber.junit.UndefinedStepException异常的求助
解决Cucumber的UndefinedStepException异常
我帮你排查下这个问题,你遇到的io.cucumber.junit.UndefinedStepException通常是因为Cucumber找不到对应的步骤定义类,核心问题出在你的Runner类的glue配置上。
问题分析
你的Runner类里glue = "stepdefination2"这行是错误的:Cucumber的glue参数需要指定的是步骤定义类所在的包路径,而不是类名。如果你的stepdefination2类直接放在项目的根包下(没有自定义包),那应该写glue = ""或者省略,但一般我们都会把步骤定义放在特定包下,比如com.yourproject.stepdefs。
另外,还有几个小细节需要确认:
- 你的feature文件路径是否正确:
features = "src/test/java/nfeature",要确保这个路径下确实存在你的.feature文件 - 步骤定义的注解和feature里的语句是否完全匹配(你的代码里这个是没问题的,正则和占位符都正确)
修复方案
1. 修正Runner类的glue配置
假设你的stepdefination2类所在的包是com.example.stepdefs(你需要替换成自己实际的包名),修改Runner类:
@RunWith(Cucumber.class) @CucumberOptions( features = "src/test/java/nfeature", // 替换成步骤定义类所在的完整包路径 glue = "com.example.stepdefs" ) public class TestRun2{ public void success() { System.out.println("test run successfully"); } }
如果你的stepdefination2没有放在任何自定义包(直接在默认包),可以改成:
glue = ""
2. 确认feature文件的位置
确保src/test/java/nfeature目录下确实有你的.feature文件,文件名要以.feature结尾,比如login.feature。
3. 检查步骤定义类的注解
你的步骤定义注解是正确的,但注意:
@Given("^user navigate to login page$")里的^和$是正则的开始和结束标记,确保feature里的语句完全匹配(你的feature里的语句是对的)@When和@Then的占位符{string}也正确对应feature里的参数
额外建议
- 尽量不要把类放在默认包下,创建一个专门的包来存放步骤定义,比如
stepdefs或者com.yourcompany.automation.stepdefs,这样更清晰也不容易出错 - 可以在
@CucumberOptions里加上monochrome = true,这样控制台输出的测试报告更易读
按照上面的修改后,重新运行测试,应该就能解决UndefinedStepException的问题了。
内容的提问来源于stack exchange,提问作者Prashant Kumar
相关产品推荐
相关产品推荐

