java - 如何使用黄瓜对多个浏览器执行并行执行
问题描述
我目前正在研究 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();
}
解决方案
推荐阅读
- python - Project Euler 问题 8 Python 整数溢出
- html - “bootstrap min css 1 加载资源失败:net::err_file_not_found”
- python - 为什么django模型保存功能没有响应?
- java - 使用spring boot和crud如何同时更新两个类的列表(它们之间存在关系)
- r - %in% 没有给出正确的输出
- javascript - React 项目 - Moment Timezone 没有欧洲/伦敦的数据
- javascript - OpenLayers:编辑坐标只需在 div 中单击以更改值(使地图居中)
- node.js - 使用 Node.js 从 AWS Lambda 函数生成唯一主键的安全方法
- azure - Azure CDN Verizon Premium 隐藏 SAS 令牌 GET 方法错误 403
- authentication - 通过 2 个公共 URL 公开的 Keycloak 服务器