Java 如何将参数传递给@BeforeClass&@通过testNG.xml文件的AfterClass方法

Java 如何将参数传递给@BeforeClass&@通过testNG.xml文件的AfterClass方法,java,xml,selenium,testng,Java,Xml,Selenium,Testng,我试图通过testNG.xml文件将参数传递给@BeforeClass方法,但当我运行脚本时,脚本既不会执行,也不会在控制台中显示任何错误,只是脚本被终止。我不知道我哪里出错了。请在这方面帮助我 注意:当我使用@BeforeSuite注释而不是@BeforeClass时,脚本运行良好 提前谢谢 下面是我的代码片段: BaseSetup.java public class BaseSetup { private WebDriver driver; private String userdir

我试图通过testNG.xml文件将参数传递给@BeforeClass方法,但当我运行脚本时,脚本既不会执行,也不会在控制台中显示任何错误,只是脚本被终止。我不知道我哪里出错了。请在这方面帮助我

注意:当我使用@BeforeSuite注释而不是@BeforeClass时,脚本运行良好

提前谢谢 下面是我的代码片段:

BaseSetup.java

public class BaseSetup {

private  WebDriver driver;
private String userdir = System.getProperty("user.dir");
private  void SelectBrowser(String browsername){

    switch(browsername){

    case "GoogleChrome": 

        //initChromeBrowser();

        break;

    case "FireFox":

        initFireFoxBrowser();

        break;

    default: 
        System.out.println("Wrong input");      
    }

}

private  void initChromeBrowser(){

    System.setProperty("webdriver.chrome.driver", userdir +"\\chromedriver.exe");

    driver = new ChromeDriver();

    launchApp();

}   
private void initFireFoxBrowser(){

    System.setProperty("webdriver.gecko.driver", userdir +"\\geckodriver.exe");

    driver = new FirefoxDriver();

    launchApp();

}

private  void launchApp(){

    driver.manage().window().maximize();

    driver.get("https://www.google.co.in");
}

@Parameters({"browsername"})

@BeforeClass

public  void LaunchBrowser(String browsername){

        SelectBrowser(browsername);     
}
}
下面是我的testNG.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SampleTestSuite">
<test name="SampleTest">

<classes>

  <class name="com.pac.base.BaseSetup">
  <parameter name="browsername" value="FireFox"> </parameter>     
   </class>

   </classes>

   </test> <!-- Test -->
   </suite> <!-- Suite -->

我认为这里没有任何问题。TestNG实际上没有执行BeforeClass方法,因为该类中不包含任何
@Test
方法
BeforeSuite
案例不同,因为我猜在这种情况下,它是一个套件级别的执行,并且可能有一些其他类作为执行的一部分,其中可能包含一个
Test
方法。所以TestNG执行它

下面是一个示例,它演示了参数的正确传递

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedClass {
    @Parameters({"browsername"})
    @BeforeClass
    public void setup(String browsername) {
        System.err.println("Browser name in @BeforeClass is " + browsername);
    }

    @Parameters({"browsername"})
    @Test
    public void testMethod(String browsername) {
        System.err.println("Browser name in @Test is " + browsername);
    }

}
套件文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="1265_Suite" parallel="false" verbose="2">
    <test name="92" parallel="false" preserve-order="true">
        <classes>
            <class name="com.rationaleemotions.stackoverflow.ParameterizedClass"/>
            <parameter name="browsername" value="firefox"/>
        </classes>
    </test>
</suite>

我认为这里没有什么问题。TestNG实际上没有执行BeforeClass方法,因为该类中不包含任何
@Test
方法
BeforeSuite
案例不同,因为我猜在这种情况下,它是一个套件级别的执行,并且可能有一些其他类作为执行的一部分,其中可能包含一个
Test
方法。所以TestNG执行它

下面是一个示例,它演示了参数的正确传递

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedClass {
    @Parameters({"browsername"})
    @BeforeClass
    public void setup(String browsername) {
        System.err.println("Browser name in @BeforeClass is " + browsername);
    }

    @Parameters({"browsername"})
    @Test
    public void testMethod(String browsername) {
        System.err.println("Browser name in @Test is " + browsername);
    }

}
套件文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="1265_Suite" parallel="false" verbose="2">
    <test name="92" parallel="false" preserve-order="true">
        <classes>
            <class name="com.rationaleemotions.stackoverflow.ParameterizedClass"/>
            <parameter name="browsername" value="firefox"/>
        </classes>
    </test>
</suite>

试试这个:它看起来是一个TestNG问题,我刚刚报告了它:谢谢Juherr&Kushal,同时它的工作方法是什么?试试这个:它看起来是一个TestNG问题,我刚刚报告了它:谢谢Juherr&Kushal,同时它的工作方法是什么?