首页 > 解决方案 > 如何使用黄瓜对多个浏览器执行并行执行

问题描述

我目前正在研究 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();
}

标签: javaautomationcucumberpageobjectstestng-eclipse

解决方案


推荐阅读