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

如何解决TestNG中@BeforeSuite注解方法的Native Injection不支持错误

问题:TestNG @BeforeSuite注解方法报错导致测试用例跳过

使用Selenium 4.11.0、TestNG 7.9.0和Eclipse 2022-06开发项目时,启动Chrome Driver失败,测试用例被跳过,错误提示:Native Injection is NOT supported for @BeforeSuite annotated launchbrowser

错误日志

[RemoteTestNG] detected TestNG version 7.9.0
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [Utils] MethodGroupsHelper.collectMethodsByGroup() took 8 ms.
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [Utils] MethodGroupsHelper.sortMethods() took 14 ms.
...(省略重复INFO日志)
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [TestNG] Running:
  C:\Users\prabh\AppData\Local\Temp\testng-eclipse-705038558\testng-customsuite.xml

Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [Utils] DynamicGraphHelper.createDynamicGraph() took 5 ms.
FAILED CONFIGURATION: @BeforeSuite commonfunctionalities.commonfunction.launchbrowser
org.testng.TestNGException: 
Native Injection is NOT supported for @BeforeSuite annotated launchbrowser.
    at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:445)
    at org.testng.internal.Parameters.createParametersForMethod(Parameters.java:350)
    at org.testng.internal.Parameters.createParameters(Parameters.java:702)
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:166)
    at org.testng.internal.invokers.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:306)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:382)
    at org.testng.SuiteRunner.run(SuiteRunner.java:336)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1228)
    at org.testng.TestNG.runSuites(TestNG.java:1134)
    at org.testng.TestNG.run(TestNG.java:1101)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

SKIPPED: testcases.pending_leave_request.verifypendingleaverequest
org.testng.TestNGException: 
Native Injection is NOT supported for @BeforeSuite annotated launchbrowser.
    at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:445)
    at org.testng.internal.Parameters.createParametersForMethod(Parameters.java:350)
    at org.testng.internal.Parameters.createParameters(Parameters.java:702)
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:166)
    at org.testng.internal.invokers.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:306)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:382)
    at org.testng.SuiteRunner.run(SuiteRunner.java:336)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1228)
    at org.testng.TestNG.runSuites(TestNG.java:1134)
    at org.testng.TestNG.run(TestNG.java:1101)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)


===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 1
    Configuration Failures: 1, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Passes: 0, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 1
===============================================

Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [TestNG] Time taken by org.testng.reporters.jq.Main@6d07a63d: 48 ms
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [TestNG] Time taken by org.testng.reporters.FailedReporter@59cba5a: 12 ms
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [TestNG] Time taken by org.testng.reporters.XMLReporter@45a37759: 11 ms
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [TestNG] Time taken by org.testng.reporters.EmailableReporter2@31add175: 7 ms
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [TestNG] Time taken by org.testng.reporters.JUnitReportReporter@457c9034: 5 ms
Feb 14, 2024 3:38:12 PM org.testng.log4testng.Logger info
INFO: [TestNG] Time taken by org.testng.internal.ExitCodeListener@345f69f3: 1 ms

通用功能代码

package commonfunctionalities;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

public class commonfunction {
    public static WebDriver driver=null;
    public static Properties properties = null;
    public void loadpropertyfile() throws IOException {
        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\prabh\\IdeaProjects\\OpenHrmProjects\\extras\\config.properties");
        properties = new Properties();
        properties.load(fileInputStream);
    }
    @SuppressWarnings("deprecation")
    @BeforeSuite
    public void launchbrowser(String driverlocation) throws IOException {
        loadpropertyfile();
        String browser = properties.getProperty("browser");
        String url = properties.getProperty("url");
        String Driverlocation = properties.getProperty("Driverlocation");

        if (browser.equalsIgnoreCase("firefox")) {
            System.setProperty("webdriver.gecko.driver",Driverlocation);
            driver = new FirefoxDriver();
        } else if (browser.equalsIgnoreCase("chrome")) {
            System.setProperty("webdriver.chrome.driver",Driverlocation);
            driver = new ChromeDriver();}
        driver.manage().window().maximize();
        driver.get(url);
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @AfterSuite
    public void teardown() {
         driver.quit();
    }
}

解决方法

1. 移除@BeforeSuite方法的多余参数

TestNG不支持给@BeforeSuite注解的方法使用原生依赖注入传递参数,你的launchbrowser方法定义了String driverlocation参数,但该参数既未被使用,也不符合TestNG的参数传递规则。直接移除这个参数即可:

修改后的launchbrowser方法:

@SuppressWarnings("deprecation")
@BeforeSuite
public void launchbrowser() throws IOException {
    loadpropertyfile();
    String browser = properties.getProperty("browser");
    String url = properties.getProperty("url");
    String Driverlocation = properties.getProperty("Driverlocation");

    if (browser.equalsIgnoreCase("firefox")) {
        System.setProperty("webdriver.gecko.driver",Driverlocation);
        driver = new FirefoxDriver();
    } else if (browser.equalsIgnoreCase("chrome")) {
        System.setProperty("webdriver.chrome.driver",Driverlocation);
        driver = new ChromeDriver();
    }
    driver.manage().window().maximize();
    driver.get(url);
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

2. 可选优化建议

  • Selenium 4.11.0已支持自动管理Driver,无需手动设置System.setProperty,可以引入WebDriverManager库简化Driver管理,避免路径配置错误。
  • implicitlyWait已被标记为过时,建议替换为driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));(需导入java.time.Duration类)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:25:17