【问题标题】:How to kill the browser instance (chrome) that was opened by web driver previously如何杀死之前由 Web 驱动程序打开的浏览器实例(chrome)
【发布时间】:2018-10-14 12:52:24
【问题描述】:

我想杀死之前由 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);

}

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

【问题讨论】:

标签: java macos selenium selenium-webdriver


【解决方案1】:

你可以试试这个代码:

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实例以及新打开的实例。

【讨论】:

  • 嗨@cruisepandey,感谢您的回复。我试过了,但我收到了这个错误:无法运行程序“TASKKILL”:错误=2,没有这样的文件或目录知道为什么文件或目录丢失了吗?
  • 您使用的是哪个 IDE?
  • 当我们没有管理员权限时会出现此错误。
  • 我正在使用eclipse
  • 请以管理员权限重新启动 Eclipse。右键单击图标并选择以管理员身份运行
【解决方案2】:

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

try {
    while(true) { 
        Thread.sleep(1000); 
        driver.getCurrentUrl(); 
    } 
} catch(Exception e) {}

将确保只要浏览器窗口打开,程序就保持活动状态。您可以在浏览器中继续手动处理。完成后,您可以关闭浏览器,这将自动结束此过程。或者在开始新任务之前,用 ^c 杀死旧任务,然后关闭浏览器。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2020-08-05
    • 2013-01-09
    相关资源
    最近更新 更多