如何通过保持webDriver激活来关闭整个浏览器窗口?

时间:2016-02-09 07:21:00

标签: selenium selenium-webdriver webdriver

在我的批处理执行中,多个标签的多个浏览器正在为第一个场景打开。我想在开始第二个场景之前关闭所有这些浏览器。

Driver.close()正在关闭浏览器的一个标签页。 Driver.quit()正在关闭所有浏览器并结束WebDriver会话。所以,我无法运行批处理执行。请为此提供解决方案。

3 个答案:

答案 0 :(得分:31)

您应该了解driver.close()driver.quit()

之间的区别

driver.close()driver.quit()是在Selenium WebDriver中关闭浏览器会话的两种不同方法。了解它们并了解何时使用哪种方法对于测试执行非常重要。

  

driver.close() - 关闭焦点所在的浏览器窗口   集。

     

driver.quit() - 它基本上调用了driver.dispose方法   关闭所有浏览器窗口并结束WebDriver会话   正常。

只要您想结束该程序,就应该使用driver.quit()。它将关闭所有打开的浏览器窗口并终止WebDriver会话。如果在程序结束时不使用driver.quit,则WebDriver会话将无法正常关闭,文件也不会从内存中清除。这可能会导致内存泄漏错误。

在您的情况下,您必须使用driver.close()来关闭当前窗口并保持驱动程序处于活动状态。

添加 - 如果只打开浏览器窗口并使用driver.close(),它将退出webdriver会话。 webdriver不会保持活动状态。

答案 1 :(得分:2)

以下说明应解释WebDriver中 driver.close driver.quit 方法之间的区别。我希望你觉得它很有用。

driver.close 和driver.quit是在Selenium WebDriver中关闭浏览器会话的两种不同方法。了解它们并了解何时使用每种方法对于测试执行非常重要。因此,我试图阐明这两种方法。

driver.close - 此方法关闭设置焦点的浏览器窗口。

driver.quit - 此方法基本上调用driver.dispose一个现在的内部方法,该方法依次关闭所有浏览器窗口并正常结束WebDriver会话。

driver.dispose - 如前所述,是WebDriver的内部方法,已根据另一个答案静默删除 - 需要验证。这种方法在正常的测试工作流程中确实没有用例,因为以前的方法都适用于大多数用例。

说明用例:只要您想结束程序,就应该使用 driver.quit 。它将关闭所有打开的浏览器窗口并终止WebDriver会话。如果在程序结束时不使用driver.quit,则WebDriver会话将无法正常关闭,并且不会从内存中清除文件。这可能会导致内存泄漏错误。

............

现在在这种情况下你需要特定的浏览器。 下面的代码将关闭除主窗口之外的所有子窗口。

String homeWindow = driver.getWindowHandle();
Set<String> allWindows = driver.getWindowHandles();

//Use Iterator to iterate over windows
Iterator<String> windowIterator =  allWindows.iterator();

//Verify next window is available
while(windowIterator.hasNext())
{
    //Store the Recruiter window id
    String childWindow = windowIterator.next();
}

//Here we will compare if parent window is not equal to child window 
if (homeWindow.equals(childWindow))
{
    driver.switchTo().window(childWindow);
    driver.close();
}

现在,您需要根据需要修改或添加条件

if (homeWindow.equals(childWindow))
{
    driver.switchTo().window(childWindow);
    driver.close();
}

目前只检查主窗口是否等于子窗口。在这里,您需要指定要关闭哪个ID的条件。我从未尝试过,所以只是建议你达到要求的方式。

答案 2 :(得分:1)

此代码关闭所有打开的窗口,然后将控制权返回到主窗口。

public static void switchTab() {            
    try {
        Set<String> windows = webDriver.getWindowHandles();
        Iterator<String> iter = windows.iterator();
        String[] winNames=new String[windows.size()];
        int i=0;
        while (iter.hasNext()) {
            winNames[i]=iter.next();
            i++;
        }

        if(winNames.length > 1) {
            for(i = winNames.length; i > 1; i--) {
                webDriver.switchTo().window(winNames[i - 1]);
                webDriver.close();
            }
        }
        webDriver.switchTo().window(winNames[0]);
    }
    catch(Exception e){         
        e.printStackTrace();
    }
}