Running Tests in Multiple Browsers in Parallel
Using Selenium Grid is the standard approach for parallel cross-browser testing.
Architecture:
TestNG (parallel="tests")
↓
RemoteWebDriver → Hub (port 4444)
↓ ↓ ↓
Chrome Node Firefox Node IE Node
Step 1 — Start Selenium Grid Hub:
java -jar selenium-server-standalone.jar -role hub
Step 2 — Register browser nodes:
# Chrome node
java -jar selenium-server-standalone.jar -role node \
-hub http://localhost:4444/grid/register \
-browser browserName=chrome,maxInstances=3
# Firefox node
java -jar selenium-server-standalone.jar -role node \
-hub http://localhost:4444/grid/register \
-browser browserName=firefox,maxInstances=3
Step 3 — RemoteWebDriver test class:
public class CrossBrowserGridTest {
WebDriver driver;
@Parameters("browser")
@BeforeClass
public void setup(String browser) throws Exception {
DesiredCapabilities caps = new DesiredCapabilities();
if (browser.equalsIgnoreCase("chrome")) {
caps.setBrowserName("chrome");
} else if (browser.equalsIgnoreCase("firefox")) {
caps.setBrowserName("firefox");
}
driver = new RemoteWebDriver(
new URL("http://localhost:4444/wd/hub"),
caps
);
}
@Test
public void verifyTitle() {
driver.get("https://example.com");
Assert.assertEquals(driver.getTitle(), "Example Domain");
}
@AfterClass
public void teardown() {
driver.quit();
}
}
Step 4 — testng.xml for parallel execution:
<suite name="GridSuite" parallel="tests" thread-count="3">
<test name="ChromeTest">
<parameter name="browser" value="chrome" />
<classes>
<class name="tests.CrossBrowserGridTest" />
</classes>
</test>
<test name="FirefoxTest">
<parameter name="browser" value="firefox" />
<classes>
<class name="tests.CrossBrowserGridTest" />
</classes>
</test>
</suite>
Key point: Selenium Grid is the solution for running tests across multiple browsers in parallel. The hub distributes test commands to registered nodes, each running a specific browser.
