确保ChromeDriver在强制退出时关闭

时间:2018-06-29 18:08:37

标签: java selenium selenium-chromedriver

运行chromeDriver时,我使用 try / catch / finally 语句来确保如果发生任何异常,我的WebDriver将会正确关闭。但是,如果抛出异常,这将非常有效。在用户强制退出我的应用程序的情况下,浏览器实例未关闭。这可能会导致在后台运行不需要的Google Chrome线程。

当用户强制退出我的应用程序时,如何确保浏览器关闭?

下面是代码示例:

public class WebDriverTest {

    WebDriver driver;
    WebDriverWait wait;

    public WebDriverTest() {
        System.setProperty("webdriver.chrome.driver", "res/chromedriver");
        driver = new ChromeDriver();
        this.wait = new WebDriverWait(driver, 1);
    }

    public static void main(String[] args) {
        WebDriverTest main = new WebDriverTest();
        main.test();
    }

    private void test() {
        try {
            driver.get("https://www.google.com");
            WebElement element = driver.findElement(By.name("q"));
            element.sendKeys("test");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //If force quit the browser is never closed
            driver.quit();
        }
    }

}

2 个答案:

答案 0 :(得分:2)

好吧,通过将退出戒律纳入最后的禁区,您似乎做对了。

在测试结束时如何执行呢?

Runtime.getRuntime().exec("taskkill /F /IM <processname>.exe")

所以您可以杀死chromedriver.exe。

答案 1 :(得分:1)

要确保在强制关闭时调用驱动程序的close / quit方法,可以使用应用程序的运行时关闭挂钩。可以在驱动程序的init方法上注册它,并将在任何Ctrl-C /其他强制退出情况下调用。考虑以下代码段。

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
  driver.close();
  driver.quit();
}));