【问题标题】:How to kill chromedriver如何杀死chromedriver
【发布时间】:2016-08-18 20:54:45
【问题描述】:

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

  1. 我不能仅仅根据进程名称来终止,因为其他几个 chromedriver 可能正在运行并且可能需要其他测试。

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

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

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

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

【问题讨论】:

    标签: google-chrome selenium webdriver


    【解决方案1】:

    正如您在测试中使用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?

    【讨论】:

    • 问题是如何杀死正确的实例——我不能杀死服务器中的所有实例,因为其他并发构建可能正在运行。
    • 我已经更新了我的答案,但从长远来看,你应该考虑更安全的选择,使用 driver.Quit()。
    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多