Cap*_*irk 3 c# selenium internet-explorer automation selenium-webdriver
我通过Visual Studio单元测试和使用InternetExplorerDriver运行Selenium Webdriver.这会在控制台窗口中激活IEDriverServer.exe.
这很好用,测试执行.一旦测试执行完成,我就像cmd.exe窗口被杀死一样,以至于我不得不做手动清理.我有成千上万的测试,所以你可以想象管理它的头痛.
是否有一种优雅的方式来处理这个问题,而无需执行测试后执行和使用kill.exe等杀死cmd.exe进程?我已经尝试过InternetExplorerDriverService.HideCommandPromptWindow = true,但这只是在隐藏模式下运行cmd.exe并使进程保持运行直到它被手动终止.我也尝试过InternetExplorerDriverService.SuppressInitialDiagnosticInformation,所有这一切都是为了抑制写入cmd.exe窗口的一些信息.
Str*_*lfa 10
为了补充关于这个主题的一些信息.您可以根据需要使用3种主要方法:
.Close(): - 此方法用于关闭当前打开的窗口.它关闭驱动程序关注的当前打开窗口.
.Quit(): - 此方法用于销毁WebDriver的实例.它会关闭与该驱动程序关联的所有浏览器窗口并安全地结束会话.Quit()调用Dispose方法来实现这一点.
.Dispose(): - 此方法关闭所有浏览器窗口并安全地结束会话 强调文本
在您的情况下,因为您需要杀死该过程,最好的选择是使用.Quit().
有时当你的selenium实例崩溃时,你无法结束这个过程,当前和所有下一个测试开始失败,甚至当你取消当前的调试测试套装时.在这种情况下,你真的需要杀死这个过程.
正如@Prateek看到的那样,他们中的一个正在使用Runtime.getRuntime().在C#中,更好的方法是:
foreach (var proc in Process.GetProcessesByName("IEDriverServer"))
{
proc.Kill();
}
Run Code Online (Sandbox Code Playgroud)
您可以在启动WebDriver的构造函数中使用它(但在启动它之前!),或者,如果您使用某些lib作为NUnit,则可以创建全局OneTimeSetUp.一种在所有测试之前只运行一次的方法.
此外,如果您不想放置代码或创建新方法来执行此作业,则可以在主.csproj中配置pre-build并post-build执行cmd命令.无论何时运行测试或构建项目,都会终止打开的webdriver实例.
要进行配置,您需要:
在.csproj中单击右键,然后单击"属性";
导航到"构建事件";
将命令粘贴到taskkill /f /fi "pid gt 0" /im IEDriverServer.exe预构建文本区域,后构建或两者中.
有两种方法:
正如评论中所建议的那样driver.quit().
但有时我们的测试失败,驱动程序继续运行.要避免使用多个驱动程序实例,您可以使用:Runtime.getRuntime().exec("taskkill /T /F /IM IEDriverServer.exe");.
使用此命令的好处是,即使您的脚本没有完全运行,它仍然会终止驱动程序.
您可以在许多地方使用它.例如: