I am not able to completely delete a project, because the chromedriver instance is running in the background, even when there is no code is being executed.
Please see the below image.
The error I get while the project deletion is:
以下面的代码为例:
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();
但通常情况下,当主线程终止时,所有支持运行的实例都应该随之终止。
这是一个已知问题,还是我编写的脚本有问题。
提前致谢。
您需要注意以下几件事:
尝试运行此代码,假设运行 5 次,将会有 5 个后台运行实例:这是因为您每次打开一个新的驱动程序实例,而您从未释放过该实例。
尝试重新启动 Eclipse,但没有成功:值得一提的是,Eclipse是一个IDE(集成开发环境),它帮助我们通过编程语言构建编程步骤。因此,通过 Eclipse,我们为 Selenium 编写程序/步骤来打开/关闭浏览器会话并退出驱动程序会话。但 Eclipse 无法控制 Selenium 在打开/关闭浏览器会话和退出驱动程序会话方面的执行。因此重新启动 Eclipse 不会产生任何影响。
driver.close()
:此命令将帮助您仅关闭当前驱动程序具有焦点的浏览器会话/窗口。
当主线程死亡时,所有支持运行的实例都应该随之死亡: 你是对的。它是 WebDriver 实例(即驱动程序 - 根据您的代码)每次都会打开所有浏览器会话。所以当你的程序结束时你应该总是调用driver.quit()
这将关闭所有浏览器窗口,退出驱动程序并安全结束会话。
但是,您可以在任何时候强制终止 WebDriver 变体的所有实例,例如壁虎司机 /questions/tagged/geckodriver, 硒铬驱动程序 /questions/tagged/selenium-chromedriver, 硒-iedriver /questions/tagged/selenium-iedriver通过os /questions/tagged/os具体方法如下:
-
Java解决方案(Windows):
import java.io.IOException;
public class Kill_ChromeDriver_GeckoDriver_IEDriverserver
{
public static void main(String[] args) throws Exception
{
Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe /T");
Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe /T");
Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer.exe /T");
}
}
-
Python解决方案(Windows):
import os
os.system("taskkill /f /im geckodriver.exe /T")
os.system("taskkill /f /im chromedriver.exe /T")
os.system("taskkill /f /im IEDriverServer.exe /T")
-
Python解决方案(跨平台):
import os
import psutil
PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
for proc in psutil.process_iter():
# check whether the process name matches
if proc.name() == PROCNAME:
proc.kill()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)