我的问题与这个问题非常相似。我启动了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(,如在回答此问题时所述。
这可能吗?
谢谢!
当您调用时,将启动一组新的GeckoDriver和Firefox浏览器
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内存?