C# 如何在运行InternetExplorerDriver测试后关闭IEDriverServer.exe控制台窗口
我正在通过VisualStudio单元测试运行SeleniumWebDriver,并使用InternetExplorerDriver。这将在控制台窗口中激发IEDriverServer.exe 这非常有效,测试也会执行。一旦测试执行完成,我希望cmd.exe窗口被关闭,这样我就不必手动清理它了。我有成千上万的测试,所以你可以想象管理这个的头痛 是否有一种优雅的方法来处理此问题,而不必执行测试后的操作,并使用kill.exe终止cmd.exe进程,等等?我尝试过InternetExplorerDriversService.HideCommandPromptWindow=true,但它只是在隐藏模式下运行cmd.exe,并让进程一直运行,直到手动终止。我还尝试了InternetExplorerDriversService.SuppressInitialDiagnosticInformation,所做的只是抑制写入cmd.exe窗口的一些信息。有两种方法:C# 如何在运行InternetExplorerDriver测试后关闭IEDriverServer.exe控制台窗口,c#,internet-explorer,selenium,selenium-webdriver,automation,C#,Internet Explorer,Selenium,Selenium Webdriver,Automation,我正在通过VisualStudio单元测试运行SeleniumWebDriver,并使用InternetExplorerDriver。这将在控制台窗口中激发IEDriverServer.exe 这非常有效,测试也会执行。一旦测试执行完成,我希望cmd.exe窗口被关闭,这样我就不必手动清理它了。我有成千上万的测试,所以你可以想象管理这个的头痛 是否有一种优雅的方法来处理此问题,而不必执行测试后的操作,并使用kill.exe终止cmd.exe进程,等等?我尝试过InternetExplorerDr
driver.quit()
中所建议的那样,将完成此工作Runtime.getRuntime().exec(“taskkill/T/F/IM IEDriverServer.exe”)代码>
为了补充awser,提供一些关于该主题的信息。您可以根据需要使用以下三种主要方法: .Close():-此方法用于关闭当前打开的窗口。它关闭驱动程序关注的当前打开的窗口 .Quit():-此方法用于销毁WebDriver的实例。它关闭与该驱动程序关联的所有浏览器窗口,并安全结束会话。Quit()调用Dispose方法来实现这一点 .Dispose():-此方法关闭所有浏览器窗口并安全结束会话 强调文本 在您的情况下,由于需要终止进程,最好的选择是使用
.Quit()
有时候,当selenium实例崩溃,当前和所有后续测试开始失败,甚至取消当前调试测试时,您都无法结束该过程。在这种情况下,您确实需要终止进程
正如@Prateek所看到的,其中一个正在使用Runtime.getRuntime()
。在C#中,更好的方法是:
foreach (var proc in Process.GetProcessesByName("IEDriverServer"))
{
proc.Kill();
}
您可以在启动WebDriver的构造函数中使用它(但在启动之前!),或者,如果您将某些库用作NUnit,则可以创建一个全局OneTimeSetUp。一种在所有测试之前只运行一次的方法
此外,如果您不想输入代码或创建新方法来执行此任务,可以在yout main.csproj中配置预编译
和后编译
,以执行cmd命令。无论何时运行测试或构建项目,它都会杀死打开的webdriver实例
要配置它,您需要:
taskkill/f/fi“pid gt 0”/im IEDriverServer.exe
粘贴到预编译文本区域、编译后或两者中
我想你应该试试这个:
InternetExplorerDriverService service = InternetExplorerDriverService.CreateDefaultService();
service.Start();
IWebDriver driver = new ThreadLocal<IWebDriver>(() => { return new InternetExplorerDriver(service); }).Value;
int pid = service.ProcessId;
// Do any automation you want with your driver...
driver.Quit(); // it calls Dispose
service.Dispose();
// And if you want to ensure... :-)
try { Process.GetProcessById(pid).Kill(); }
catch { }
InternetExplorerDriverService服务=InternetExplorerDriverService.CreateDefaultService();
service.Start();
IWebDriver driver=new ThreadLocal(()=>{返回新的InternetExplorerDriver(服务);});
intpid=service.ProcessId;
//对您的驱动程序执行任何您想要的自动化操作。。。
driver.Quit();//它叫Dispose
service.Dispose();
//如果你想确保…:-)
请尝试{Process.GetProcessById(pid.Kill();}
捕获{}
请注意,它适用于Chrome、Firefox和其他驱动器 您是否在IWebDriver中尝试了
.Quit()
?在最后一次拆卸时尝试一下。它将关闭浏览器并结束驱动程序进程。我没有。Quit()完成了任务。谢谢大家!@斯特里特·阿尔法:为什么不发表你的评论作为答案呢?顺便说一句,使用taskkill/f/fi“pid gt 0”/im MicrosoftWebDriver.exe作为Edge。你的解决方案让我手动启动服务。我更喜欢基于驱动程序实例的解决方案。