How to enable developer tools while running the automation testing selenium grid using docker

81 views
Skip to first unread message

Saikat Das

unread,
Jan 5, 2025, 1:53:49 PMJan 5
to Selenium Users
how to interact with the browser's developer tools during automation tests that are running in a distributed Selenium Grid environment, using Docker?

Selenium version: 4.27.0
Code is running fine
Here is the code of my base class

package GenericUtils;

import java.net.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v130.network.Network;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;

import io.github.bonigarcia.wdm.WebDriverManager;




public class BaseClass {
    public FileUtility fLib = new FileUtility();
    public WebDriverUtility wLib = new WebDriverUtility();
    public ExcelUtility eLib = new ExcelUtility();
    public JavaUtility jLib = new JavaUtility();

    public WebDriver driver;

    public static WebDriver sdriver = null;
    public String USERNAME;
    public String PASSWORD;
    public String INVALIDUSERNAME;
    public String INVALIDPASSWORD;

    @BeforeSuite
    public void bSuite() {

    }    

    @BeforeClass
    public void launchBrowser() throws Throwable {
        // Read data from property file
        String BROWSER = fLib.getPropertyKeyValue("Browser");
        String URL = fLib.getPropertyKeyValue("url");
        String REMOTE = fLib.getPropertyKeyValue("remote"); // New property to decide remote or local execution

        if (REMOTE.equalsIgnoreCase("yes")) {
            // Configure for Selenium Grid
            if (BROWSER.equalsIgnoreCase("chrome")) {
                ChromeOptions options = new ChromeOptions();
                options.addArguments("--remote-debugging-port=9222");
                driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), options);
                if (driver instanceof ChromeDriver) {
                    ChromeDriver chromeDriver = (ChromeDriver) driver;
                    DevTools devTools = chromeDriver.getDevTools();
                    devTools.createSession();  // Create a DevTools session
                   
                    // Enable the Network domain to capture network events
                    devTools.send(org.openqa.selenium.devtools.v85.network.Network.enable(Optional.of(1000000), Optional.of(1000000), Optional.of(1000000)));

                    // Capture network responses
                    devTools.addListener(org.openqa.selenium.devtools.v85.network.Network.responseReceived(), response -> {
                        String url = response.getResponse().getUrl();
                        int statusCode = response.getResponse().getStatus();
                        System.out.println("URL: " + url + " | Status Code: " + statusCode);
                        if (statusCode == 200) {
                            System.out.println("Network request to " + url + " succeeded with status 200 OK.");
                        } else {
                            System.out.println("Network request to " + url + " failed with status " + statusCode);
                        }
                    });
                } else {
                    System.out.println("Driver is not an instance of ChromeDriver.");
                }
            } else if (BROWSER.equalsIgnoreCase("edge")) {
                EdgeOptions options1 = new EdgeOptions();
                options1.addArguments("--remote-debugging-port=9222");
                driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), options1);
                if (driver instanceof EdgeDriver) {
                    EdgeDriver edgeDriver = (EdgeDriver) driver;
                    DevTools devTools = edgeDriver.getDevTools();
                    devTools.createSession();  
                    devTools.send(Network.enable(Optional.of(1000000), Optional.of(1000000), Optional.of(1000000)));
                    devTools.addListener(Network.responseReceived(), response -> {
                        String url = response.getResponse().getUrl();
                         
                        int statusCode = response.getResponse().getStatus();
                        System.out.println("URL: " + url + " | Status Code: " + statusCode);
                        if (statusCode == 200) {
                            System.out.println("Network request to " + url + " succeeded with status 200 OK.");
                        } else {
                            System.out.println("Network request to " + url + " failed with status " + statusCode);
                        }
                    });
                } else {
                    System.out.println("DevTools is only supported for EdgeDriver.");
                }
            } else if (BROWSER.equalsIgnoreCase("firefox")) {
                EdgeOptions options2 = new EdgeOptions();
                driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), options2);
            } else {
                System.out.println("Invalid browser specified for remote execution.");
                return;
            }
            System.out.println("===========Browser Launch on Selenium Grid Successfully===========");
        } else {
            // Local execution
            if (BROWSER.equalsIgnoreCase("edge")) {
            EdgeOptions options = new EdgeOptions();
                WebDriverManager.edgedriver().setup();
                HashMap<String, Object> edgePrefs = new HashMap<>();
                edgePrefs.put("download.default_directory", System.getProperty("user.dir") + "\\Download-Files");
                edgePrefs.put("profile.default_content_settings.popups", 0);
                edgePrefs.put("profile.default_content_setting_values.automatic_downloads", 1);
                EdgeOptions options2 = new EdgeOptions();
                options2.setExperimentalOption("excludeSwitches", new String[] {"enable-automation"});
                options2.setExperimentalOption("prefs", edgePrefs);
                driver = new EdgeDriver();
                if (driver instanceof EdgeDriver) {
                    EdgeDriver edgeDriver = (EdgeDriver) driver;
                    DevTools devTools = edgeDriver.getDevTools();
                    devTools.createSession();  
                    devTools.send(Network.enable(Optional.of(1000000), Optional.of(1000000), Optional.of(1000000)));
                    devTools.addListener(Network.responseReceived(), response -> {
                        String url = response.getResponse().getUrl();
                         
                        int statusCode = response.getResponse().getStatus();
                        System.out.println("URL: " + url + " | Status Code: " + statusCode);
                        if (statusCode == 200) {
                            System.out.println("Network request to " + url + " succeeded with status 200 OK.");
                        } else {
                            System.out.println("Network request to " + url + " failed with status " + statusCode);
                        }
                    });
                } else {
                    System.out.println("DevTools is only supported for EdgeDriver.");
                }
            } else if (BROWSER.equalsIgnoreCase("chrome")) {
            WebDriverManager.chromedriver().setup();
              System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
                HashMap<String, Object> prefs = new HashMap<>();
            prefs.put("download.default_directory", System.getProperty("user.dir") + "\\Download-Files");
                ChromeOptions options = new ChromeOptions();
                options.setExperimentalOption("prefs", prefs);
                options.setExperimentalOption("w3c", true);
                options.setExperimentalOption("excludeSwitches", new String[] {"enable-automation"});
                driver = new ChromeDriver(options);
                if (driver instanceof ChromeDriver) {
                ChromeDriver chromeDriver = (ChromeDriver) driver;
                DevTools devTools = chromeDriver.getDevTools();
                devTools.createSession();
                devTools.send(Network.enable(Optional.of(1000000), Optional.of(1000000), Optional.of(1000000)));
                devTools.addListener(Network.responseReceived(), response -> {
                        String url = response.getResponse().getUrl();
                        int statusCode = response.getResponse().getStatus();
                        System.out.println("URL: " + url + " | Status Code: " + statusCode);
                        if (statusCode == 200) {
                            System.out.println("Network request to " + url + " succeeded with status 200 OK.");
                        } else {
                            System.out.println("Network request to " + url + " failed with status " + statusCode);
                        }
                    });
                } else {
                    System.out.println("DevTools is only supported for EdgeDriver.");
                }
            } else if (BROWSER.equalsIgnoreCase("firefox")) {
            WebDriverManager.firefoxdriver().setup();
            FirefoxProfile profile = new FirefoxProfile();
            profile.setPreference("browser.download.folderList", 2);
            profile.setPreference("browser.download.dir", System.getProperty("user.dir") + "\\Download-Files");
            profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/xlsx");
            profile.setPreference("pdfjs.disabled", true);
            FirefoxOptions options = new FirefoxOptions();
            options.setProfile(profile);
                driver = new FirefoxDriver(options);
            }else if (BROWSER.equalsIgnoreCase("safari")) {
            WebDriverManager.safaridriver().setup();
                driver = new SafariDriver();
            }else
            {
                System.out.println("Invalid browser specified for local execution.");
                return;
            }
            System.out.println("===========Browser Launch Locally Successfully===========");
        }

        // Common configurations
        wLib.maximiseWindow(driver);
        wLib.waitUntilPageLoad(driver);
        driver.get(URL);
        sdriver = driver; // Assigning to static driver
    }

   
    @BeforeMethod
    public void loginToApp() throws Throwable {
        //read data from property file
        USERNAME = fLib.getPropertyKeyValue("username");
        PASSWORD = fLib.getPropertyKeyValue("password");
        INVALIDUSERNAME = fLib.getPropertyKeyValue("invalidusername");
        INVALIDPASSWORD = fLib.getPropertyKeyValue("invalidpassword");
        System.out.println("=============login sucessfull===========");
    }

    @AfterMethod
    public void logoutApp() {
        //sign out of home page
        System.out.println("==========sign out sucessfull==========");
    }
    @AfterClass
    public void closeBrowser() {
        //driver.quit();
        System.out.println("=====Browser close sucessfull============");
    }
    @AfterSuite
    public void closeDB() {
        System.out.println("=============DB connection closed sucessfully======");
    }
}

code is running successfully in grid but not getting any details in console

Please help!!
thank you
Reply all
Reply to author
Forward
0 new messages