[英]How to pass parameters to @BeforeClass & @AfterClass methods through testNG.xml file
I am trying to pass parameter to @BeforeClass method through testNG.xml file, but when I run my script, neither the script is executed nor any error is shown in the console, just the script is terminated. 我试图通过testNG.xml文件将参数传递给@BeforeClass方法,但是当我运行脚本时,既不执行脚本也不在控制台中显示任何错误,只是脚本终止了。 Not sure where am I going wrong. 不知道我要去哪里错了。 Kindly help me on this. 请帮助我。
PS: Script is working good when I use @BeforeSuite annotation instead of @BeforeClass PS:当我使用@BeforeSuite注释而不是@BeforeClass时,脚本运行良好
Below is my code snippet: 以下是我的代码段:
BaseSetup.java 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);
}
}
Below is my testNG.xml code 下面是我的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 -->
I dont think there's any issue here. 我认为这里没有任何问题。 TestNG is actually not executing the BeforeClass
method because the class doesn't contain any @Test
methods in it. 实际上,TestNG没有执行BeforeClass
方法,因为该类中不包含任何@Test
方法。 BeforeSuite
case is different because I guess in that case, its a suite level execution and there can be chances that some other class that is part of the execution might have a Test
method in it. BeforeSuite
情况有所不同,因为在这种情况下,我猜想它是套件级别的执行,并且可能会有一部分其他类作为执行的一部分在其中包含Test
方法。 So TestNG executes it. 因此,TestNG执行它。
Here's a sample which demonstrates that parameters are passed properly 这是一个示例,说明参数已正确传递
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);
}
}
Suite file 套件文件
<?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>
Output 输出量
...
... TestNG 6.11 by Cédric Beust (cedric@beust.com)
...
Browser name in @BeforeClass is firefox
Browser name in @Test is firefox
===============================================
1265_Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.