3

我正在使用 Windows 10 pro x64、Firefox 50.x、Java 8、Selenium 3.0.1

public RemoteWebDriver remoteWebDriver;

//...

System.setProperty("webdriver.gecko.driver", browserWebDriverFilePath);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
remoteWebDriver = new FirefoxDriver(capabilities);
remoteWebDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
remoteWebDriver.manage().window().maximize();

//...

remoteWebDriver.quit();

在此处输入图像描述

4

3 回答 3

6

从命令行运行:

taskkill /F /IM geckodriver.exe

或者更好的是,将其放入批处理文件并在每次要清理时运行该文件。

如果需要,您也可以在开始运行之前从代码中执行此操作:

boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
try {
    if (isDebug)
        Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe");
} catch (IOException e) {
    e.printStackTrace();
}

如果您并行运行,仅在调试时避免杀死从属上的实例。

于 2016-11-20T12:35:35.133 回答
1

我最近遇到了 webdriver 这个问题,它留下了许多僵尸 geckodriver 进程。

将 driver.quit() 放在 finally 块中可以解决这个问题。

FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
WebDriver driver = new FirefoxDriver(options);

try {

   .... 

} finally {
   driver.quit();
}
于 2018-12-05T05:19:02.007 回答
0

如果 driver.Close() 和执行 driver.Quit(),这种方式不会成功,而是用 driver.Quit() 覆盖 driver.Close()

不使用终端执行,因为会将进程留在服务器中。

于 2020-01-19T10:51:01.443 回答