Advertisement
derekantrican

Selenium ChromeDriver embedding

May 4th, 2018
685
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.96 KB | None | 0 0
  1. using OpenQA.Selenium.Chrome;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Diagnostics;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Runtime.InteropServices;
  10. using System.Text;
  11. using System.Threading;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14.  
  15. namespace TestProject
  16. {
  17.     public partial class EmbeddedProgram : Form
  18.     {
  19.         IntPtr EmbeddedWindowHandle;
  20.         public EmbeddedProgram()
  21.         {
  22.             InitializeComponent();
  23.  
  24.             //----------------------TEST---------------------
  25.             ChromeDriverService service = ChromeDriverService.CreateDefaultService();
  26.             service.HideCommandPromptWindow = true;
  27.  
  28.             ChromeDriver driver = new ChromeDriver(service);
  29.             Console.WriteLine(driver.CurrentWindowHandle);
  30.  
  31.             Process chromeDriverProcess = Process.GetProcessById(service.ProcessId);
  32.             //EmbeddedWindowHandle = driver.CurrentWindowHandle;
  33.             //----------------------TEST---------------------
  34.  
  35.             ProcessStartInfo processInfo = new ProcessStartInfo("notepad.exe");
  36.             Process p = Process.Start(processInfo);
  37.             p.WaitForInputIdle();
  38.             EmbeddedWindowHandle = p.MainWindowHandle;
  39.             SetParent(EmbeddedWindowHandle, panel1.Handle);
  40.             MoveWindow(EmbeddedWindowHandle, 0, 0, panel1.Width, panel1.Height, true);
  41.             SetWindowLong(EmbeddedWindowHandle, GWL_STYLE, WS_VISIBLE);
  42.         }
  43.  
  44.         private const int GWL_STYLE = -16;
  45.         private const int WS_VISIBLE = 0x10000000;
  46.         private const int WM_CLOSE = 0x10;
  47.  
  48.         [DllImport("user32.dll")]
  49.         static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
  50.  
  51.         [DllImport("user32.dll", EntryPoint = "SetWindowLongA", SetLastError = true)]
  52.         private static extern long SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);
  53.  
  54.         [DllImport("user32.dll", SetLastError = true)]
  55.         private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);
  56.  
  57.         [DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)]
  58.         private static extern bool PostMessage(IntPtr hwnd, uint Msg, int wParam, int lParam);
  59.  
  60.         private void EmbeddedProgram_Resize(object sender, EventArgs e)
  61.         {
  62.             MoveWindow(EmbeddedWindowHandle, 0, 0, panel1.Width, panel1.Height, true);
  63.         }
  64.  
  65.         private void EmbeddedProgram_FormClosing(object sender, FormClosingEventArgs e)
  66.         {
  67.             if (EmbeddedWindowHandle != IntPtr.Zero)
  68.             {
  69.                 // Post a close message
  70.                 PostMessage(EmbeddedWindowHandle, WM_CLOSE, 0, 0);
  71.  
  72.                 // Delay for it to get the message
  73.                 Thread.Sleep(1000);
  74.  
  75.                 // Clear internal handle
  76.                 EmbeddedWindowHandle = IntPtr.Zero;
  77.             }
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement