如何在Windows上执行测试之前终止所有浏览器窗口和驱动程序

时间:2017-12-26 22:34:18

标签: c# selenium

资源:C#,Selenium 3.5,NUnit,Windows,VS17

我想在开始执行测试之前杀死所有以前的浏览器(现在让我们使用chrome.exe)以及chromedriver.exe。

我知道这个命令

  

Taskkill / IM chrome.exe / F

  

Taskkill / IM chromedriver.exe / F

但我不确定如何在Selenium中使用/实现 - C#。

如果我在init之前运行,下面的代码似乎不起作用:

//we can give any process name to handle this
Process[] chromeDriverProcesses = Process.GetProcessesByName("chromedriver");
foreach (var chromeDriverProcess in chromeDriverProcesses)
{
    // that's how we can kill all chromedriver 
    chromeDriverProcess.Kill();
}

我想要进行此清理的原因是因为我想与Jenkins和其他VM一起运行它,我们看到了一些问题。如果我们在执行之前杀死/清除浏览器/驱动程序,则可以解决问题。

如果我们有更好的解决方案,请告诉我。

我正在使用它,直到我得到一个好的解决方案:

if (Settings.BrowserType.Equals(Constant.Chrome))
{
    // check chrome driver  browser and kill
    Process[] chromeAndDriverProcesses = Process.GetProcessesByName("chromedriver");
    foreach (var chromeDriverProcess in chromeAndDriverProcesses)
    {
        chromeDriverProcess.Kill();
    }
    // check chrome browser and kill 
    chromeAndDriverProcesses = Process.GetProcessesByName("chrome");
    foreach (var chromeDriverProcess in chromeAndDriverProcesses)
    {
        //chromeDriverProcess.Kill();
    }
}

3 个答案:

答案 0 :(得分:1)

试试这个:

foreach(Process P in Process.GetProcessesByName("chromedriver"))
    P.Kill();
foreach(Process P in Process.GetProcessesByName("chrome"))
    P.Kill();

你能澄清你的意思

  

如果我在init之前运行,那么下面的内容似乎无效:

答案 1 :(得分:1)

这应该是我尝试的工作

System.Diagnostics.ProcessStartInfo p;
p = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/C "+ "taskkill /f /im chromedriver.exe");
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = p;
proc.Start();
proc.WaitForExit();
proc.Close();

有关详细信息,请参阅here

答案 2 :(得分:0)

使用 I want to kill all previous browser 跟踪最佳做法时,问题Selenium根本不会出现。

根据最佳做法自动执行 Selenium ,您应该在quit()中调用 tearDown() {} 方法。通过 {"发送"退出" 命令,调用 quit() DELETE当前浏览会话flags":[" eForceQuit"]} ,最后在 / shutdown EndPoint上发送 GET 请求。以下是一个例子:

1503397488598   webdriver::server   DEBUG   -> DELETE /session/8e457516-3335-4d3b-9140-53fb52aa8b74 
1503397488607   geckodriver::marionette TRACE   -> 37:[0,4,"quit",{"flags":["eForceQuit"]}]
1503397488821   webdriver::server   DEBUG   -> GET /shutdown

因此,在调用 quit() 方法时,Web Browser会话和WebDriver实例将完全被杀死。因此,您不必加入额外的 Taskkill 命令,这些命令看起来是一种开销。

回答这个问题:

如果你想执行 Taskkill shell命令来终止Chrome Web Browser会话,ChromeDriver你可以使用以下代码块:

  • 终止 Chrome Web Browser

    string str_shell_command_chrome;
    str_shell_command_chrome = "taskkill /F /IM chrome.exe /T";
    System.Diagnostics.Process.Start("CMD.exe",str_shell_command_chrome);
    
  • 终止 ChromeDriver

    string str_shell_command_chromedriver;
    str_shell_command_chromedriver = "taskkill /F /IM chromedriver.exe /T";
    System.Diagnostics.Process.Start("CMD.exe",str_shell_command_chromedriver);
    

琐事

要在杀死command prompt二进制文件时隐藏ChromeDriver,您可以使用以下代码块:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "taskkill /F /IM chromedriver.exe /T";
process.StartInfo = startInfo;
process.Start();