资源: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();
}
}
答案 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();