chromedriver在背景中运行

时间:2017-04-17 05:17:34

标签: java eclipse selenium selenium-webdriver selenium-chromedriver

我无法完全删除项目,因为chromedriver实例在后台运行,即使没有执行代码也是如此。 请看下面的图片。 Task Manager Process View

项目删除时出现的错误是:Eclipse error while project deletion

以下面的代码为例:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test {

    public static void main(String[] args) throws Exception {

        String url = "https://www.google.com";
        System.setProperty("webdriver.chrome.driver", "src/driver/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.get(url);
        System.out.println(driver.getTitle());

    }
}

尝试运行此代码,比如5次,并且将有5个后台运行实例。尝试重新启动Eclipse,没有运气。

我理解这种情况正在发生,因为我不是在写这一行:

driver.close();

但通常情况下,当主线程死掉时,所有支持运行的实例都会死掉它。

这是一个已知问题,还是我写错了。

提前致谢。

4 个答案:

答案 0 :(得分:3)

由于chromedriver是一个可执行文件,因此它作为一个单独的线程运行,并且它没有被关闭,因为你的driver.close()方法没有被调用,所以除了手动关闭它之外别无选择。您可以选择从任务管理器手动关闭chromedriver.exe进程,但我建议在命令提示符中使用以下命令

 taskkill /f /im chromedriver.exe

可以运行此特定命令以删除Windows设备上运行的任何进程。

答案 1 :(得分:1)

执行chrome驱动程序时,必须如上所述关闭它,以便关闭chrome驱动程序。基本上为了运行测试,你应该使用相关的运行框架作为JUnit(对于java),然后你就不会感到困惑。

答案 2 :(得分:1)

让我在这里回答你的所有观点:

  1. Try running this code, say 5 times, and there will be 5 background running instances - 这是因为每次打开一个你从未发布过的新驱动程序实例。

  2. Tried restarting Eclipse, with no luck - 值得一提的是Eclipse是一个IDE(集成开发环境),它可以帮助我们通过编程语言构建编程步骤。因此,通过Eclipse,我们为Selenium编写程序/步骤来打开/关闭浏览器会话并退出驱动程序会话。但是,在打开/关闭浏览器会话和退出驱动程序会话方面,Eclipse无法控制Selenium所执行的执行。因此,重新启动Eclipse将没有任何区别。

  3. driver.close(); - 此命令将仅帮助您关闭当前驱动程序具有焦点的浏览器会话/窗口。

  4. when the main-thread dies, all supporting running instances should die with it. - 你是对的。它是WebDriver实例(即驱动程序 - 根据您的代码),它每次打开所有浏览器会话。因此,当您的程序结束时,您应该始终调用driver.quit();关闭所有浏览器窗口,退出驱动程序并安全地结束会话。

  5. 如果这有助于您,请告诉我。

答案 3 :(得分:0)

使用以下cmd

创建一个bat文件(killchorme.bat)

taskkill / f / im chromedriver.exe

然后在使用启动Chrome驱动程序之前调用bat文件 调用Runtime.getRuntime()。EXEC( “killchrome.bat”)