</>

Technology

Scenario-Based

Difficulty

Advanced

5 views

Interview Question

How do you run Selenium tests in parallel across multiple browsers?

Answer

Parallel Execution Across Multiple Browsers

Method 1 — TestNG Parallel with Browser Parameter

testng.xml:

XML
<suite name="CrossBrowserSuite" parallel="tests" thread-count="3">

    <test name="ChromeTest">
        <parameter name="browser" value="chrome"/>
        <classes><class name="tests.LoginTest"/></classes>
    </test>

    <test name="FirefoxTest">
        <parameter name="browser" value="firefox"/>
        <classes><class name="tests.LoginTest"/></classes>
    </test>

    <test name="EdgeTest">
        <parameter name="browser" value="edge"/>
        <classes><class name="tests.LoginTest"/></classes>
    </test>

</suite>

Base Test Class:

Java
public class BaseTest {
    protected WebDriver driver;

    @Parameters("browser")
    @BeforeMethod
    public void setUp(String browser) {
        switch (browser.toLowerCase()) {
            case "chrome":
                WebDriverManager.chromedriver().setup();
                driver = new ChromeDriver();
                break;
            case "firefox":
                WebDriverManager.firefoxdriver().setup();
                driver = new FirefoxDriver();
                break;
            case "edge":
                WebDriverManager.edgedriver().setup();
                driver = new EdgeDriver();
                break;
        }
        driver.manage().window().maximize();
    }

    @AfterMethod
    public void tearDown() {
        if (driver != null) driver.quit();
    }
}

Method 2 — ThreadLocal for Thread-Safe Driver

Java
public class DriverManager {
    private static ThreadLocal<WebDriver> tlDriver = new ThreadLocal<>();

    public static WebDriver getDriver() { return tlDriver.get(); }

    public static void setDriver(WebDriver driver) { tlDriver.set(driver); }

    public static void removeDriver() {
        tlDriver.get().quit();
        tlDriver.remove();
    }
}

Method 3 — Selenium Grid

Bash
# Start Hub
java -jar selenium-server.jar hub

# Register Chrome Node
java -jar selenium-server.jar node --hub http://localhost:4444
Java
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
WebDriver driver = new RemoteWebDriver(
    new URL("http://localhost:4444/wd/hub"), caps
);

Key Rules for Parallel Execution

  • Always use ThreadLocal<WebDriver> — never share driver instances between threads
  • Each test must create and destroy its own driver in @Before/@AfterMethod
  • Use independent test data per thread to avoid conflicts
  • Set thread-count in testng.xml to match available machine cores/nodes

Follow AutomateQA

Related Topics