如何杀死chromedriver

时间:2016-08-18 11:07:59

标签: google-chrome selenium webdriver

运行我的量角器测试后,我可能会继续运行chromedriver.exe。简单的问题是:我该如何杀死它?这里有几点需要注意:

  1. 我不能仅根据进程名称进行杀死,因为其他几个chromedrivers可能正在运行,其他测试可能需要它。

  2. 我已经使用“curl http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer”停止了selenium服务器

  3. 我注意到chromedriver正在侦听端口33107(是否有可能以某种方式指定此端口?),但我不知道应该如何调用它来退出。

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

  5. 如何从命令行中删除正确的chromedriver进程(例如使用curl)?

1 个答案:

答案 0 :(得分: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?

相关问题