Как выполнить параллельное выполнение для нескольких браузеров, используя огурец - PullRequest
0 голосов
/ 19 марта 2020

В настоящее время я работаю над фреймворком Cucumber + MVN + TestNG + selenium. У меня есть переменная "browser", которую я определил в файле .properties, и я могу получить доступ к этой переменной в моих шагах огурца правильно. Но теперь я посылаю параметры браузера из TestNG xml, и для последовательных тестовых прогонов он работает отлично. Но когда я пытаюсь запустить параллельно с несколькими браузерами, он выполняет только один тест и параллельно выполняет firefox или chrome тесты.

Мой тестNG 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...