2016-08-18 120 views
0

运行我的量角器测试后,我可能会留下chromedriver.exe运行。简单的问题是:我如何杀死它?有几件事情,这里要注意:如何杀死chromedriver

  1. 我不能杀了基于过程的名称,因为其他几个chromedrivers可能正在运行,并且可以通过其他测试是必要的。

  2. 我使用“卷曲http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer

  3. 我注意到chromedriver在端口33107监听(是否有可能以某种方式指定此端口?)已经停止硒服务器,但我不知道应该怎样我叫它退出。

  4. 也许我应该在我的测试中使用driver.quit(),但在某些情况下它可能不会被调用(例如构建被取消时)。

任何想法如何从命令行中杀死正确的chromedriver进程(例如使用curl)?

回答

0

正确的做法正如您在测试中使用driver.quit()所述。实际上,确切地说是在你的测试清理方法中,因为你每次都想要一个新的浏览器实例。 现在,一些单元测试框架(例如MSTest)的问题是,如果您的测试初始化​​方法失败,则不会调用测试清理方法。 作为解决方法,您可以围绕在try-catch声明您测试初始化​​与catch调用和执行您的测试清理。

public void TestInitialize() 
{ 
    try 
    { 
     //your test initialize statements 
    } 
    catch 
    { 
     TestCleanup(); 
     //throw exception or log the error message or whatever else you need 
    } 
} 
public void TestCleanup() 
{ 
    driver.Quit(); 
} 

编辑: 因为当建造被取消,您可以创建杀死Chrome浏览器和ChromeDriver开始测试新套件之前被执行的所有打开的实例的方法的情况下。 例如如果你使用的单元测试框架有类似于Class InitializeAssembly Initialize的东西,你可以在那里做。

然而,在不同的文章中,我发现这种方法:

PORT_NUMBER=1234 lsof -i tcp:${PORT_NUMBER} | awk 'NR!=1 {print $2}' | xargs kill 命令

(lsof -i tcp:${PORT_NUMBER})的故障 - 列出的TCP端口 (awk 'NR!=1 {print $2}')监听所有进程 - 忽略第一行,打印每行的第二列 (xargs kill) - 将结果作为参数传递给kill。可能有几个。

这里,更精确地说:How to find processes based on port and kill them all?

+0

的问题是,究竟是如何杀死正确的情况下 - 我不能杀死所有实例的服务器作为其他并发版本可能运行。 –

+0

我已经更新了我的答案,但从长远来看,您应该考虑更安全的选项,使用driver.Quit()来完成。 – Cosmin