Reputation: 113
How to run test suites parallel or serially in multiple browser using selenium grid. I have 3 xml files, one chrome.xml(contains all my test to be run in chrome), and one firefox.xml(contains all my test to be run in firefox) and testng.xml contains the both as suites.
Chrome.xml
<suite name="Chrome">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="chrome"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
firefox.xml
<suite name="Firefox">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="firefox"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
testng.xml
<suite name="My Project" parallel="tests">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<suite-files>
<suite-file path="./Chrome.xml" />
<suite-file path="./firefox.xml" />
</suite-files>
</suite>
Thanks in advanced, i am using page object model hence the reason for suite file for each browser.
Upvotes: 0
Views: 2097
Reputation: 3628
@BeforeTest
and use the quit()
in the @AfterTest
.You can find an example under one of my question: Parameterized Selenium Tests in Parallel with TestNG
Update:
How to make your WebDriver thread safe:
private List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private ThreadLocal<WebDriver> driverThread;
@BeforeTest()
public void beforeTest() {
//...
this.driverThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
WebDriver webDriver = new RemoteWebDriver(...);
webDriverPool.add(webDriver);
return webDriver;
}
};
}
@AfterTest(alwaysRun = true)
public void afterTest() {
for (WebDriver driver : this.webDriverPool) {
driver.quit();
}
}
// Use this method instead of driver.get()
public WebDriver getDriver() {
return this.driverThread.get();
}
}
Upvotes: 1