Java 如何杀死以前由web驱动程序打开的浏览器实例(chrome)

Java 如何杀死以前由web驱动程序打开的浏览器实例(chrome),java,macos,selenium,selenium-webdriver,Java,Macos,Selenium,Selenium Webdriver,我想杀死之前由web驱动程序打开的浏览器实例(chrome)。我该怎么做?在下面的代码中,我故意不想包含quit()或close(),因为我想让浏览器保持打开状态。因此,每当我执行或运行这个程序时,我都想终止/关闭以前打开的浏览器,然后启动一个新实例并保持其打开状态。因此,一次只能打开浏览器的一个实例。我正在使用Mac public static void main(String[] args){ String website = "http://www.google.com";

我想杀死之前由web驱动程序打开的浏览器实例(chrome)。我该怎么做?在下面的代码中,我故意不想包含quit()或close(),因为我想让浏览器保持打开状态。因此,每当我执行或运行这个程序时,我都想终止/关闭以前打开的浏览器,然后启动一个新实例并保持其打开状态。因此,一次只能打开浏览器的一个实例。我正在使用Mac

public static void main(String[] args){

    String website = "http://www.google.com";
    System.setProperty(".....");
    WebDriver driver = new ChromeDriver();
    driver.get(website);

}

问题是,每次我执行这个,chrome实例就会堆积起来。避免这种情况的最佳方法是什么?我这样做不是为了测试。我这样做是因为我想自动化一项任务。谢谢

您可以尝试以下代码:

public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "D:\\Automation\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.google.com/");
        try{
            Runtime.getRuntime().exec("TASKKILL /F /IM chrome.exe");
        }
        catch(IOException io){
            System.out.println(io.getMessage());
        }
    }  

注意:它将杀死以前与新打开的实例一起打开的所有chrome实例。

如果我理解正确,您正在尝试自动化流程的一部分,然后让自动化程序退出,保持浏览器打开,手动完成其余步骤。在这种情况下,确保只有一个这样的窗口处于打开状态的最佳方法是保持自动化脚本处于空闲状态,直到您完成手动任务。在您的主要功能的末尾,类似这样的内容:

try {
    while(true) { 
        Thread.sleep(1000); 
        driver.getCurrentUrl(); 
    } 
} catch(Exception e) {}
将确保程序在浏览器窗口打开时保持活动状态。您可以在浏览器中继续手动处理。完成后,可以关闭浏览器,这将自动结束此过程。或者在开始新任务之前,使用^c终止旧任务,这将关闭浏览器


第二个选项是查找新创建的浏览器实例的进程id,而不使自动化脚本处于空闲状态。您可以将进程id保存在临时文件夹中的某个文件中。每次脚本启动时,它都会检查文件,从中读取pid,如果进程id存在,则在生成新的浏览器窗口之前尝试将其杀死。

每次测试后,可能会在分解步骤中删除driver.Quit()?杀死java进程!这不是一个好的做法。请阅读带有示例的快速硒教程。可能与hi@cruisepandey重复,谢谢您的回复。我试过了,但我得到了这个错误:无法运行程序“TASKKILL”:错误=2,没有这样的文件或目录。不知道为什么文件或目录丢失了?您正在使用哪个IDE?当我们没有管理员权限时,会出现此错误。我使用eclipse请使用管理员权限重新启动eclipse。为此,右键单击图标并选择以管理员身份运行