Search code examples
automated-testscucumbertestngselenide

How to get broweser name when each thread in parallel test execution with multiple browsers in TestNG, Cucumber and Selenide


Is there a way to get the current browser name of each thread running using Selenide?
I integrated TestNG Cucumber with multiple browsers.
So I need to know at @After hook, which browser is running the test.
And based on browser do some stuff.

    <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="TestSuite" thread-count="8" parallel="tests" >
    <test name="ChromeTest">
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.site.runner.TestRunner">
            </class>
        </classes>
    </test>
    <test name="FirefoxTest">
        <parameter name="browser" value="firefox" />
        <classes>
            <class name="com.site.runner.TestRunner">
            </class>
        </classes>
    </test>
    <test name="SafariTest">
        <parameter name="browser" value="safari" />
        <classes>
            <class name="com.site.runner.TestRunner">
            </class>
        </classes>
    </test>
</suite>

Selenide set driver

public static synchronized void setDriver(String browser) {
        setBrowser(browser);
    }

public String setBrowser(String browser){

        switch(browser){
            case "chrome":
                return setCapabilities(browser);
            case "firefox":
                return Configuration.browser = "firefox";
            case "edge":
                return Configuration.browser = "edge";
            default:
                return "No Browser found";
        }

public static void directToBrowserUrl(String browserUrl) {
        open(browserUrl);
    }

Solution

  • Get the capabilities and current thread of the driver in @After method.

    Code:

     Capabilities capabilities = ((RemoteWebDriver) driver).getCapabilities();
        String browserName = capabilities.getBrowserName();
        String threadName = Thread.currentThread().getName();
        long threadId = Thread.currentThread().getId();
        
        System.out.println("Thread name & browser name: "+threadName +" --> "+browserName);
        System.out.println("Thread id & browser name: "+threadId +" --> "+browserName);
    
        if(browserName.equalsIngnoreCase("Chrome"){
         //do your stuff
        }
    

    Output:

    Thread name & browser name: com.CallerScript.Caller.main() --> chrome
    Thread id & browser name: 16 --> chrome