Get Window handle (IntPtr) from Selenium webdriver's current window GUID
You could get the window handle using Process.GetProcesses
:
using (FirefoxDriver driver = new FirefoxDriver()){ driver.Navigate().GoToUrl(url); string title = String.Format("{0} - Mozilla Firefox", driver.Title); var process = Process.GetProcesses() .FirstOrDefault(x => x.MainWindowTitle == title); if (process != null) { var screenCapture = new ScreenCapture(); var image = screenCapture.CaptureWindow(process.MainWindowHandle); // ... }}
This of course assumes that you have a single browser instance with that specific title.
Just and idea for hack. You may use Reflection methods to get process of firefox instance. First declare FirefoxDriverEx class inherited from FirefoxDriver - to access protected Binary property which encapsulates Process instance:
class FirefoxDriverEx : FirefoxDriver { public Process GetFirefoxProcess() { var fi = typeof(FirefoxBinary).GetField("process", BindingFlags.NonPublic | BindingFlags.Instance); return fi.GetValue(this.Binary) as Process; } }
Than you may get process instance for access to MainWindowHandle property
using (var driver = new FirefoxDriverEx()) { driver.Navigate().GoToUrl(url); var process = driver.GetFirefoxProcess(); if (process != null) { var screenCapture = new ScreenCapture(); var image = screenCapture.CaptureWindow(process.MainWindowHandle); // ... } }
Out of box, selenium does not expose driver process id or Browser hwnd but it is possible.Below is the logic to get hwnd
- When driver is initialized, get the url for hub and extract the port number
- From port number, find the process id which is using this port for listening, ie. PID of driver
- After navigation, from all instances of iexplore find the parent PID matches the pid of driver, i.e browser pid.
- Get the Hwnd of browser pidonce browser hwnd is found , you can use win32 api to bring selenium to foreground.
its not possible to post full code here, the full working solution (C#) to bring browser in front is on my blog
http://www.pixytech.com/rajnish/2016/09/selenium-webdriver-get-browser-hwnd/