Search code examples
c#seleniumwebdriverselenium-webdriverpid

Find PID of browser process launched by Selenium WebDriver


In C# I start up a browser for testing, I want to get the PID so that on my winforms application I can kill any remaining ghost processes started

driver = new FirefoxDriver();

How can I get the PID?


Solution

  • Looks more like a C# question, instead of Selenium specific.

    This is a very old non-deterministic answer, please reconsider if you want to try this out.

    My logic would be you get all process PIDs with the name firefox using Process.GetProcessesByName Method, then start your FirefoxDriver, then get the processes' PIDs again, compare them to get the PIDs just started. In this case, it doesn't matter how many processes have been started by a specific driver (For example, Chrome starts multiple, Firefox only one).

    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using OpenQA.Selenium.Firefox;
    
    namespace TestProcess {
        [TestClass]
        public class UnitTest1 {
            [TestMethod]
            public void TestMethod1() {
                IEnumerable<int> pidsBefore = Process.GetProcessesByName("firefox").Select(p => p.Id);
    
                FirefoxDriver driver = new FirefoxDriver();
                IEnumerable<int> pidsAfter = Process.GetProcessesByName("firefox").Select(p => p.Id);
    
                IEnumerable<int> newFirefoxPids = pidsAfter.Except(pidsBefore);
    
                // do some stuff with PID if you want to kill them, do the following
                foreach (int pid in newFirefoxPids) {
                    Process.GetProcessById(pid).Kill();
                }
            }
        }
    }