You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Cucumber问题:通过Runner类执行时Feature文件无法识别Step Definition类

解决Cucumber测试中Feature无法关联Step Definition的问题

看起来你遇到了Cucumber测试里经典的「步骤未定义(Undefined Steps)」问题,同时还有PendingException导致的失败,我来帮你一步步排查和解决:

核心问题分析

从错误信息和代码来看,主要有几个关键问题:

  1. Cucumber依赖版本不兼容:你的Runner类用了旧版的cucumber.api包,而Step Definition用了新版的io.cucumber包,版本混合会导致Cucumber无法识别步骤绑定。
  2. Feature步骤与Step Definition不匹配:Feature里的When User enters and缺少参数,无法匹配Step Definition里的正则表达式(.*)。
  3. 主动抛出PendingException:你的browser_open方法里主动抛出了这个异常,即使步骤匹配成功也会直接失败。

分步解决方案

1. 统一Cucumber依赖版本

Cucumber从4.x版本开始就迁移到了io.cucumber包,旧版的cucumber.api已经被弃用,所以需要修改Runner类的导入:

package StepDefinition;
import org.junit.runner.RunWith;
// 替换旧的导入为新版io.cucumber的包
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)
@CucumberOptions(
 features = {"src/test/resources/Features"},
 monochrome = true,
 plugin = {"pretty","junit:target/JUnitReports/report.xml", "json:target/JSONReports/report.json", "html:target/HTMLReports"},
 glue={"StepDefinition"},
 strict = true,
 tags= {"@Login, @Home"}
 // ,dryRun = true
)
public class RunnerClass {
}

同时确保你的依赖管理文件(如Maven的pom.xml或Gradle的build.gradle)里所有Cucumber依赖的版本一致,比如用6.10.4版本:

<!-- Maven示例 -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>6.10.4</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>6.10.4</version>
    <scope>test</scope>
</dependency>

2. 修复Feature文件的步骤参数

你的Step Definition里的@When注解用了(.*)来捕获用户名和密码,但Feature里的步骤没有提供参数,导致无法匹配。修改Alogin.feature:

@Login
Feature: login check
Scenario: Check if user can login
Given User is on login page
<!-- 添加具体的参数值,用引号包裹 -->
When User enters "Admin" and "admin123"
And I click on the login button
Then I Print succesfully logged in

3. 移除不必要的PendingException

PendingException是用来标记未实现的步骤,你的browser_open方法已经实现了初始化浏览器的逻辑,所以要删掉这个抛出语句:

@Given("^User is on login page$")
public void browser_open() throws Throwable{
 System.setProperty("webdriver.chrome.driver","D:\\automation\\chrome driver new version\\87\\chromedriver.exe");
 driver=new ChromeDriver();
 driver.navigate().to("https://opensource-demo.orangehrmlive.com/");
 // 移除这行代码
 // throw new PendingException();
}

4. 额外检查点

  • 确认src/test/resources/Features目录下确实存在Alogin.feature和Bhome.feature文件,路径和Runner里的配置一致。
  • 检查Step Definition类的包名是StepDefinition,和Runner里glue={"StepDefinition"}的配置匹配,Cucumber会自动扫描这个包下的所有步骤类。

验证修改

完成以上修改后,重新运行Runner类,应该能看到步骤成功关联,不会再出现Undefined Steps的提示,同时PendingException的错误也会消失。

内容的提问来源于stack exchange,提问作者Konain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:52:34