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:
- Chromedriver process launched on some free port.
- Chromedriver process launches chrome-browser process with
--remote-debugging-port=0which means some free port. - Chromedriver process interacts with chrome-browser process
Providing DebuggerAddress
When we define DebuggerAddress, this means:
- Chromedriver process launched on some free port.
- 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:
- Chromedriver process launched on some free port.
- Chromedriver process launches chrome-browser process on port=
--remote-debugging-port
Providing Chromedriver service port
- Chromedriver process launched on port=chromedriver service port.
- Chromedriver process launches chrome-browser process with
--remote-debugging-port=0which means some free port. - 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.
