driver调用quit方法和调用close方法的区别?

问题

  • 在UI自动化中怎样进行浏览器的关闭操作?

  • 使用driver调用quit和调用close的区别是什么?

考察点

  • 是否用过Selenium框架
  • 是否编写过对应浏览器退出的测试用例

技术点

  • Selenium API
    • driver.quit()
    • driver.close()

回答

quit()

  • 退出当前所有的窗口;

close()

  • 关闭当前的标签页,其他窗口不退出

场景

关闭所有的浏览器窗口,销毁driver操作,则需要使用的是quit方法;当打开了多个窗口,只想要关闭非最后一个窗口的时候,使用的是close方法。

演示代码

  • quit:所有的浏览器窗口退出
@Test
public void quit() throws InterruptedException {
    WebDriver webDriver = WebDriverManager.chromedriver().create();
    webDriver.get("https://www.baidu.com/");
    webDriver.findElement(By.linkText("新闻")).click();
    sleep(5000);
    //输出当前的窗口
    Set<String> windowHandles = webDriver.getWindowHandles();
    System.out.println(windowHandles);
    sleep(3000);
    //切换到第一个窗口
    webDriver.switchTo().window(windowHandles.stream().findFirst().get());

    sleep(2000);
    System.out.println(webDriver.getWindowHandle());
    //Quits this driver, closing every associated window.
    webDriver.quit();
    sleep(6000);

}
  • close:只关闭当前的浏览器标签页,如果当前浏览器标签页剩下最后一个,则所有标签页面退出
@Test
public void close() throws InterruptedException {
        WebDriver webDriver = WebDriverManager.chromedriver().create();
        webDriver.get("https://www.baidu.com/");
        String mainHandle = webDriver.getWindowHandle();
        webDriver.findElement(By.linkText("新闻")).click();
        sleep(2000);
        //切换到第一个窗口
        webDriver.switchTo().window(mainHandle);
        sleep(2000);
        webDriver.findElement(By.linkText("图片")).click();
        sleep(2000);
        webDriver.close();//关闭第一个窗口
        System.out.println("浏览器关闭第一个窗口");
        sleep(6000);
        //切换到最后一个窗口关闭
        Set<String> handles = webDriver.getWindowHandles();
        ArrayList<String> hanleList = new ArrayList<>(handles);
        String endHandle = hanleList.get(hanleList.size() - 2);
        webDriver.switchTo().window(endHandle);
        sleep(2000);
        webDriver.close();
        System.out.println("浏览器关闭最后一个标签页");
        sleep(6000);
        }