我的问题与this question非常相似。我启动了许多WebDriver
实例,其中一些实例没有响应driver.quit()
。如this response中所述,我可以通过以下代码直接从功能对象中检索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
的实例。如另一个线程所述,我无法通过Geckdriver
随意杀死所有taskkill /f /im geckodriver.exe
个实例,因为需要一些实例。
简而言之,我希望能够通过功能来检索Geckodriver
的PID,并以类似于我们能够检索{{的PID的方式1}},如in response to this question所述。
这可能吗?
谢谢!
答案 0 :(得分:0)
在调用时会启动一组新的 GeckoDriver 和 Firefox浏览器:
WebDriver driver = new FirefoxDriver();
您可以在Is this correct - FirefoxDriver driver = new FirefoxDriver();?
中找到详细的讨论
当您调用以下命令时, GeckoDriver / Firefox浏览器的寿命将不复存在:
driver.quit()
中找到详细的讨论
因此,一种通用的解决方案将是,不保持/保存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 : How to stop geckodriver process impacting PC memory, without calling driver.quit()?
中找到另一种方法