Home > Enterprise >  Unable to set ChromeOptions for Selenium Webdriver C#
Unable to set ChromeOptions for Selenium Webdriver C#

Time:02-05

I am using Selenium chrome driver to open URLs and I am creating new driver instance for each URL. I am assigning port number for each URL through ChromeOptions.

As I mentioned earlier, I am creating a new port number for each URL. During first iteration port is opened and URL loaded properly but after the first iteration new port is not getting opened. I have verified the port status using netstat -an in command prompt. only my first port number is listed there.

So when breakpoint hits this line of code driver = new ChromeDriver(chromeService, m_Options); nothing happens for a minute and I am getting timeout error since the port is not available to connect.

private static List<int> processIdList = new List<int>();
IWebDriver driver;
foreach (var url in urls)
{

  int portno = GetAvailablePortNumber(); 
  ProcessStartInfo pcsInfo = new ProcessStartInfo();
  pcsInfo.FileName = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
  pcsInfo.WorkingDirectory = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
  pcsInfo.Arguments =  = "--new-window --remote-debugging-port=portno --disable-fre --no-first-run --no-default-browser-check --user-data-dir=C:\\SeleniumApps\\WebLauncherTool\\bin\\Debug\\ChromeUser\\portno"
  
  pcsInfo.LoadUserProfile = true;
  Process process = new Process();
  process.StartInfo = pcsInfo;
  
  if (process.Start())
  {
      processId = process.Id;
      processIdList.Add(processId);
  }
    
  ChromeDriverService chromeService = ChromeDriverService.CreateDefaultService();
  chromeService.HideCommandPromptWindow = true;
  ChromeOptions m_Options = new ChromeOptions();
  m_Options.AddArgument("--disable-extensions");
  m_Options.DebuggerAddress = $"localhost:{portno}";
  driver = new ChromeDriver(chromeService, m_Options);
  driver.Navigate().GoToUrl(url);

}

I could not figure out why the port is not getting opened. Can someone shed some light on this please.

CodePudding user response:

The default behavior when chrome driver session launched is:

  1. Chromedriver process launched on some free port.
  2. Chromedriver process launches chrome-browser process with --remote-debugging-port=0 which means some free port.
  3. Chromedriver process interacts with chrome-browser process

Providing DebuggerAddress

When we define DebuggerAddress, this means:

  1. Chromedriver process launched on some free port.
  2. Chromedriver process DO NOT LAUNCH chrome-browser process, but tries connecting by provided DebuggerAddress.

Providing --remote-debugging-port

When we define --remote-debugging-port, this means:

  1. Chromedriver process launched on some free port.
  2. Chromedriver process launches chrome-browser process on port=--remote-debugging-port

Providing Chromedriver service port

  1. Chromedriver process launched on port=chromedriver service port.
  2. Chromedriver process launches chrome-browser process with --remote-debugging-port=0 which means some free port.
  3. Chromedriver process interacts with chrome-browser process

So, providing DebuggerAddress is required for the case, when we want to connect to already launched with --remote-debugging-port browser instance.

  •  Tags:  
  • Related