You need to enable JavaScript to run this app. 使用TestNG与Cucumber运行Selenium代码触发空指针异常如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用TestNG与Cucumber运行Selenium代码触发空指针异常如何解决

TestNG+Cucumber运行触发AbstractTestNGCucumberTests空指针的解决方法

问题根源

空指针出现在AbstractTestNGCucumberTests的features方法调用阶段,核心触发原因是Cucumber新旧版本包导入错配:

  • 当前代码中继承的测试基类AbstractTestNGCucumberTests来自旧版Cucumber(cucumber.api.testng包,对应Cucumber 2.x及更早版本)
  • 但使用的@CucumberOptions注解来自新版io.cucumber包(对应Cucumber 4.x及之后版本)
  • 两套包不兼容,旧版测试基类无法读取到注解配置,内部持有的测试执行器实例未完成初始化,调用方法时直接抛出空指针。

分步修正方案

  • 统一Cucumber依赖与导入逻辑,避免新旧包混杂
    • 移除所有JUnit相关冗余导入:org.junit.runner.RunWith、io.cucumber.junit.Cucumber,删除注释掉的@RunWith(Cucumber.class)(该注解为JUnit专属,TestNG执行场景下无实际作用,留着只会引发类加载冲突)
    • 替换旧版测试基类导入为同版本的TestNG适配类:把cucumber.api.testng.AbstractTestNGCucumberTests替换为io.cucumber.testng.AbstractTestNGCucumberTests,配套的@CucumberOptions使用同包下的io.cucumber.testng.CucumberOptions
    • 删除无实际逻辑的冗余导入:org.testng.annotations.BeforeClass、cucumber.api.testng.CucumberFeatureWrapper、cucumber.api.testng.TestNGCucumberRunner
      修正后的Runner类示例:
    package com.BDD.Runner;
    import io.cucumber.testng.AbstractTestNGCucumberTests;
    import io.cucumber.testng.CucumberOptions;
    import org.testng.annotations.DataProvider;
    
    @CucumberOptions(features = "src/test/resources/Features",
            glue = {"com.BDD.StepDef"},
            monochrome = true,
            plugin = {"pretty", "html:target/HtmlReports/index.html",
                    "json:target/JsonReports/report.json"},
            tags = "@test")
    public class CucumberRunner extends AbstractTestNGCucumberTests {
        // 如需并行执行测试,可调整parallel参数值,单线程执行可保留默认父类逻辑
        @Override
        @DataProvider(parallel = false)
        public Object[][] scenarios() {
            return super.scenarios();
        }
    }
    
  • 校验Features路径与配置有效性
    • 确认src/test/resources/Features目录下存在.feature后缀的用例文件,无路径大小写、拼写错误
    • 确认用例上标注的@test标签无拼写偏差,避免因无匹配用例导致执行器初始化失败
    • 确认开发工具已将src/test/resources标记为测试资源根目录,避免类加载时找不到路径下的资源文件
  • TestNG配置文件无需调整
    当前testng.xml的类引用配置逻辑正确,修正Runner类后可直接运行该套件,无需额外添加监听器、初始化方法等配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 15:54:04