运行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();
}
}
}
答案 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();
}));