我无法完全删除项目,因为chromedriver实例在后台运行,即使没有执行代码也是如此。 请看下面的图片。
以下面的代码为例:
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();
但通常情况下,当主线程死掉时,所有支持运行的实例都会死掉它。
这是一个已知问题,还是我写错了。
提前致谢。
答案 0 :(得分:3)
由于chromedriver是一个可执行文件,因此它作为一个单独的线程运行,并且它没有被关闭,因为你的driver.close()方法没有被调用,所以除了手动关闭它之外别无选择。您可以选择从任务管理器手动关闭chromedriver.exe进程,但我建议在命令提示符中使用以下命令
taskkill /f /im chromedriver.exe
可以运行此特定命令以删除Windows设备上运行的任何进程。
答案 1 :(得分:1)
执行chrome驱动程序时,必须如上所述关闭它,以便关闭chrome驱动程序。基本上为了运行测试,你应该使用相关的运行框架作为JUnit(对于java),然后你就不会感到困惑。
答案 2 :(得分:1)
让我在这里回答你的所有观点:
Try running this code, say 5 times, and there will be 5 background running instances
- 这是因为每次打开一个你从未发布过的新驱动程序实例。
Tried restarting Eclipse, with no luck
- 值得一提的是Eclipse是一个IDE(集成开发环境),它可以帮助我们通过编程语言构建编程步骤。因此,通过Eclipse,我们为Selenium编写程序/步骤来打开/关闭浏览器会话并退出驱动程序会话。但是,在打开/关闭浏览器会话和退出驱动程序会话方面,Eclipse无法控制Selenium所执行的执行。因此,重新启动Eclipse将没有任何区别。
driver.close();
- 此命令将仅帮助您关闭当前驱动程序具有焦点的浏览器会话/窗口。
when the main-thread dies, all supporting running instances should die with it.
- 你是对的。它是WebDriver实例(即驱动程序 - 根据您的代码),它每次打开所有浏览器会话。因此,当您的程序结束时,您应该始终调用driver.quit();
关闭所有浏览器窗口,退出驱动程序并安全地结束会话。
如果这有助于您,请告诉我。
答案 3 :(得分:0)
使用以下cmd
创建一个bat文件(killchorme.bat)taskkill / f / im chromedriver.exe
然后在使用启动Chrome驱动程序之前调用bat文件 调用Runtime.getRuntime()。EXEC( “killchrome.bat”)