问题是我需要获得IE浏览器实例的PID,以便关闭IE浏览器(用C#语言工作).我使用Selenium启动了IE浏览器,然后使用Driver Service类作为:-。
InternetExplorerDriverService driverdetails = InternetExplorerDriverService.CreateDefaultService();
Console.WriteLine(driverdetails.Port);
计划是获取端口,然后有它的子进程。通过手动输入Port的值,我可以使用调试器来实现。但是,通过driverdetails.Port获取的端口并不是我的驱动程序实际使用的端口。
有没有什么办法可以让我找到任何一个驱动服务的端口?
对于IE来说,我有一个替代方法,启动IE并获得带有端口的URL,其中写道 http:/localhost:. 然而,其他浏览器的情况并非如此。我想制作通用代码,因此我使用了驱动服务对象。
据我所知 InternetExplorerDriverService的ProcessID属性。 获取正在运行的驱动服务可执行文件的进程ID,而我们无法通过InternetExplorer webdriver获取IE浏览器实例的PID。如果你想获得PID,你可以尝试使用 流程类.
从你的描述来看,你似乎想通过使用IE Webdriver关闭IE标签或窗口。如果是这样,我建议你可以使用 InternetExplorerDriver WindowHandles。 来获取已打开的窗口,然后使用 switchto
方法来切换窗口并检查url或标题,最后,调用 Close
方法来关闭IE窗口。请参考以下示例代码。
private const string URL = @"https://dillion132.github.io/login.html";
private const string IE_DRIVER_PATH = @"D:\Downloads\webdriver\IEDriverServer_x64_3.14.0"; // where the Selenium IE webdriver EXE is.
static void Main(string[] args)
{
InternetExplorerOptions opts2 = new InternetExplorerOptions() { InitialBrowserUrl = "https://www.bing.com", IntroduceInstabilityByIgnoringProtectedModeSettings = true, IgnoreZoomLevel = true };
using (var driver = new InternetExplorerDriver(IE_DRIVER_PATH, opts2))
{
driver.Navigate();
Thread.Sleep(5000);
//execute javascript script
var element = driver.FindElementById("sb_form_q");
var script = "document.getElementById('sb_form_q').value = 'webdriver'; console.log('webdriver')";
IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
jse.ExecuteScript(script, element);
InternetExplorerDriverService driverdetails = InternetExplorerDriverService.CreateDefaultService(IE_DRIVER_PATH);
Console.WriteLine(driverdetails.Port);
// open multiple IE windows using webdriver.
string url = "https://www.google.com/";
string javaScript = "window.open('" + url + "','_blank');";
IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)driver;
jsExecutor.ExecuteScript(javaScript);
Thread.Sleep(5000);
//get all opened windows (by using IE Webdriver )
var windowlist = driver.WindowHandles;
Console.WriteLine(windowlist.Count);
//loop through the list and switchto the window, and then check the url
if(windowlist.Count > 1)
{
foreach (var item in windowlist)
{
driver.SwitchTo().Window(item);
Console.WriteLine(driver.Url);
if(driver.Url.Contains("https://www.bing.com"))
{
driver.Close(); //use the Close method to close the window. The Quit method will close the browser window and dispose the webdriver.
}
}
}
Console.ReadKey();
}
Console.ReadKey();
}