通过PID进程[Java]杀死GeckoDriver



我的问题与这个问题非常相似。我启动了WebDriver的许多实例,其中一些实例对driver.quit()没有响应。如本响应中所述,我可以通过以下代码从功能对象直接检索PID来杀死浏览器实例:

  • 代码块:

    import java.io.IOException;
    import org.openqa.selenium.Capabilities;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.remote.RemoteWebDriver;
    public class Kill_Firefox_PID {
    public static void main(String[] args) throws IOException {
    System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
    System.out.println("moz:processID value is : "+cap.getCapability("moz:processID"));
    Runtime.getRuntime().exec("taskkill /PID "+cap.getCapability("moz:processID"));
    }
    }
    
  • 控制台输出:

    moz:processID value is : 8492
    

虽然这可以很好地杀死浏览器本身,但当我打开任务管理器时,我仍然可以看到Geckodriver的实例。正如在另一个线程中所述,我无法通过taskkill /f /im geckodriver.exe不加区别地杀死所有Geckdriver实例,因为需要一些实例。

简言之,我希望能够通过功能检索Geckodriver的PID,并以与我们能够检索Firefox WebDriver的PID类似的方式销毁Geckodriver的那些实例(通过PID(,如在回答此问题时所述。

这可能吗?

谢谢!

当您调用时,将启动一组新的GeckoDriverFirefox浏览器

WebDriver driver = new FirefoxDriver();

您可以在这是正确的吗-FirefoxDriver driver=new FirefoxDriver((;中找到详细的讨论;?


GeckoDriver/Firefox浏览器的使用寿命在您调用时终止

driver.quit()

您可以在PhantomJS web驱动程序内存中找到详细的讨论


解决方案

因此,一个通用的解决方案是,不保留geckodriver的过时实例,而是根据测试执行的流程调用close()quit(),这将使您免于不加区分地杀死所有geckodriver实例。

然而,在测试执行结束时,如果您想杀死所有GeckoDriver实例,您可以使用以下解决方案:

public class Killing_GeckoDriver_PID {
public static void main(String[] args) throws IOException {
String line;
String pidInfo ="";
System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
Process p =Runtime.getRuntime().exec(System.getenv("windir") +"\system32\"+"tasklist.exe");
BufferedReader input =  new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
pidInfo+=line; 
}
input.close();
if(pidInfo.contains("geckodriver.exe"))
{
Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe"); 
}
System.out.println("Killed all the instances of GeckoDriver");
}
}

您可以在Selenium讨论中找到另一种方法:如何在不调用driver.quit((的情况下阻止geckodriver进程影响PC内存?

最新更新