我目前正在研究Cucumber + MVN + TestNG + Selenium框架。我在.properties文件中定义了一个变量“浏览器”,并且能够在黄瓜步骤中正确访问此变量。但是现在我要从TestNG xml发送浏览器参数,并且对于顺序测试运行,它运行得很好。但是,当我尝试与多个浏览器并行运行时,它仅执行一个测试,它将并行执行firefox或chrome测试。
我的testNG xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite" data-provider-thread-count="4" parallel="tests">
<test name="TestChrome">
<parameter name="browser" value="chrome"></parameter>
<classes>
<class name="runners.RunnerTest" />
</classes>
</test>
<test name="TestFirefox">
<parameter name="browser" value="firefox"></parameter>
<classes>
<class name="runners.RunnerTest" />
</classes>
</test>
</suite>
我的Configuration.properties如下所示,我正尝试使用TestNG参数覆盖
environment=st
browser = chrome
我的WebDriverManager类
public class WebDriverManager {
public WebDriver driver;
public WebDriver driverCommon;
private static DriverType driverType;
private static EnvironmentType environmentType;
public WebDriverManager() {
driverType = FileReaderManager.getInstance().getconfigReader().getBrowser();
environmentType = FileReaderManager.getInstance().getconfigReader().getEnvironment();
}
public WebDriver getDriver() {
if (driver == null)
driver = createDriver();
return driver;
}
public WebDriver quitDriver() {
if (driver != null)
driver = closeDriver();
return driver;
}
private WebDriver createDriver() {
switch (environmentType) {
case ST:
driver = createSTDriver();
break;
case DEV:
driver = createDEVDriver();
break;
case UAT:
driver = createUATDriver();
break;
case PROD:
driver = createPRODDriver();
}
return driver;
}
private WebDriver createSTDriver() {
// Find out the OS whether it is mac or windows
String os = System.getProperty("os.name").toLowerCase();
String onlineURL = OnlineURLEnum.ONLInesT.toString();
if (os.contains("mac")) {
switch (driverType) {
case FIREFOX:
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setacceptInsecureCerts(true);
firefoxOptions.setHeadless(true);
System.setProperty("webdriver.gecko.driver","/Users/test/Drivers/geckodriver");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.navigate().to(onlineURL);
System.out.println("Navigate to Firefox browser");
break;
case CHROME:
System.setProperty("webdriver.chrome.driver","/Users/test/Drivers/chromedriver");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.navigate().to(onlineURL);
System.out.println("Navigate to Chrome browser");
break;
case SAFARI:
driver = new SafariDriver();
driver.manage().window().maximize();
driver.navigate().to(onlineURL);
System.out.println("Navigate to Safari browser");
break;
}
}
我的跑步者班
@CucumberOptions(strict = true,features = "src/test/resources/features",glue = { "stepDefinitions" },tags = {
"@DEVCON001.0" },plugin = { "pretty","html:target/cucumber-reports/cucumber-pretty","json:target/cucumber-reports/CucumberTestReport.json","rerun:target/cucumber-reports/rerun.txt","json:target/cucumber-reports/CucumberTestReport.json" },monochrome = true)
public class RunnerTest {
private TestNGCucumberRunner testNGCucumberRunner;
private String browser;
@Beforeclass(alwaysRun = true)
public void setUpClass() throws Exception {
testNGCucumberRunner = new TestNGCucumberRunner(this.getclass());
}
@Parameters({"browser"})
@BeforeTest
public void beforeSuite(String browser) throws ConfigurationException,IOException {
browser = Reporter.getcurrentTestResult().gettestcontext().getcurrentXmlTest().getParameter("browser");
ConfigFileWriter configFileWriter;
configFileWriter = new ConfigFileWriter(browser);
System.out.println("Browser for the tests: " + browser);
this.browser = browser;
}
@Test(dataProvider = "features")
public <CucumberFeatureWrapper> void feature(PickleWrapper eventwrapper,CucumberFeatureWrapper cucumberFeature)
throws Throwable {
testNGCucumberRunner.runScenario(eventwrapper.getPickle());
}
@DataProvider(parallel = true)
public Object[][] features() {
return testNGCucumberRunner.provideScenarios();
}
@AfterClass(alwaysRun = true)
public void tearDownClass() throws Exception {
testNGCucumberRunner.finish();
}