Answer
Handling Multiple Browser Windows in Selenium
When an action opens a new browser window or tab, WebDriver stays focused on the original window. You must explicitly switch to the new one.
Get All Window Handles
Java
// Store the original window handle
String mainWindow = driver.getWindowHandle();
// Click something that opens a new window
driver.findElement(By.id("openNewWindow")).click();
// Get all window handles
Set<String> allWindows = driver.getWindowHandles();
// Switch to the new window
for (String window : allWindows) {
if (!window.equals(mainWindow)) {
driver.switchTo().window(window);
break;
}
}
// Now work in the new window
System.out.println("New window title: " + driver.getTitle());
driver.findElement(By.id("someElement")).click();
// Close new window and switch back to main
driver.close();
driver.switchTo().window(mainWindow);
Wait for New Window to Open
Java
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> handles = driver.getWindowHandles();
Reusable Helper Method
Java
public void switchToNewWindow(String mainWindowHandle) {
Set<String> allHandles = driver.getWindowHandles();
for (String handle : allHandles) {
if (!handle.equals(mainWindowHandle)) {
driver.switchTo().window(handle);
return;
}
}
}
public void switchToWindowByTitle(String title) {
for (String handle : driver.getWindowHandles()) {
driver.switchTo().window(handle);
if (driver.getTitle().equals(title)) return;
}
}
Key Methods
| Method | Purpose |
|---|---|
getWindowHandle() | Current window ID |
getWindowHandles() | All open window IDs (Set) |
switchTo().window(handle) | Switch focus to a window |
driver.close() | Close current window |
driver.quit() | Close all windows + quit driver |
Note:
getWindowHandles()returns aSet— order is not guaranteed in older browsers. Use title-based switching when order matters.
