Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Closing all opened tabs except the first tab/main tab using webdriver

Can anyone tell me how to close all opened tabs except the first tab/main tab using webdriver?

I tried below, but it is closing all tabs including first tab as well.

public static void closeTabs() {
    String wh1=driver.getWindowHandle();
    String cwh=null;
    while(wh1!=cwh)
    {   
    new Actions(driver).sendKeys(Keys.CONTROL).sendKeys(Keys.NUMPAD1).perform();
    driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL, Keys.TAB);
    cwh=driver.getWindowHandle();
    driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL+"w");
    }
}

Please help me.

like image 496
Srikanth Nakka Avatar asked Aug 28 '13 16:08

Srikanth Nakka


2 Answers

I did the following to close all windows but the main one:

// Find out which handle is the one of the main window
String mainWindow = driver.CurrentWindowHandle;

// Get a list of all windows, except the main window
driver.WindowHandles.Where(w => w != mainWindow).ToList()
    // For each window found
    .ForEach(w =>
    {
        // switch to the window
        driver.SwitchTo().Window(w);

        // close the window
        driver.Close();
    });

// At the end, come back to the main window
driver.SwitchTo().Window(mainWindow);
like image 183
rfcordeiro Avatar answered Sep 21 '22 08:09

rfcordeiro


Get all the window handles then iterate through them, switching webdriver to the new handle, then calling the close method. Obviously skip this for the original handle, then switch back to the remaining handle.

Something like;

    String originalHandle = driver.getWindowHandle();

    //Do something to open new tabs

    for(String handle : driver.getWindowHandles()) {
        if (!handle.equals(originalHandle)) {
            driver.switchTo().window(handle);
            driver.close();
        }
    }

    driver.switchTo().window(originalHandle);
like image 35
Robbie Wareham Avatar answered Sep 19 '22 08:09

Robbie Wareham