Window handles help you switch between different browser windows or tabs during a test. This lets you control and test multiple windows easily.
Window handles (getWindowHandles) in Selenium Java
Set<String> windowHandles = driver.getWindowHandles();
getWindowHandles() returns a set of unique IDs for all open windows.
You can use these IDs to switch control between windows using driver.switchTo().window(handle).
Set<String> handles = driver.getWindowHandles();
for (String handle : handles) {
System.out.println(handle);
}String mainWindow = driver.getWindowHandle(); Set<String> allWindows = driver.getWindowHandles(); for (String window : allWindows) { if (!window.equals(mainWindow)) { driver.switchTo().window(window); break; } }
This test opens a website, then opens a new tab with Google. It gets all window handles, switches to the new tab, and prints its title.
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.util.Set; public class WindowHandlesExample { public static void main(String[] args) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("https://www.example.com"); String mainWindow = driver.getWindowHandle(); // Simulate opening a new window (for example purposes, open a new URL in new tab) ((org.openqa.selenium.JavascriptExecutor) driver).executeScript("window.open('https://www.google.com','_blank');"); Set<String> allWindows = driver.getWindowHandles(); System.out.println("Number of windows: " + allWindows.size()); for (String window : allWindows) { if (!window.equals(mainWindow)) { driver.switchTo().window(window); System.out.println("Switched to new window with title: " + driver.getTitle()); break; } } driver.quit(); } }
Always store the main window handle before opening new windows to switch back later.
Window handles are unique strings identifying each open window or tab.
Use driver.switchTo().window(handle) to change focus to a specific window.
Window handles let you manage multiple browser windows or tabs in Selenium tests.
getWindowHandles() returns all open window IDs as a set.
Switch between windows using their handles to test multi-window scenarios.
Practice
getWindowHandles() return when called?Solution
Step 1: Understand the purpose of
This method is designed to return all window handles for every open window or tab in the current browser session.getWindowHandles()Step 2: Identify the return type
The method returns a Set of Strings, each representing a unique window handle (ID).Final Answer:
A set of all open window handles (IDs) in the current WebDriver session -> Option AQuick Check:
getWindowHandles() = all window IDs [OK]
- Confusing getWindowHandles() with getWindowHandle() which returns one handle
- Expecting a list or array instead of a set
- Thinking it returns page titles or URLs
Solution
Step 1: Check the return type of getWindowHandles()
The method returns a Set of Strings, so the variable must be declared as Set<String>.Step 2: Verify method name and syntax
The correct method is getWindowHandles() (plural), and it belongs to the WebDriver instance named driver.Final Answer:
Set<String> handles = driver.getWindowHandles(); -> Option CQuick Check:
Correct syntax uses Set<String> and getWindowHandles() [OK]
- Using List instead of Set for window handles
- Calling getWindowHandle() instead of getWindowHandles()
- Assigning to a String instead of a collection
Set<String> handles = driver.getWindowHandles(); System.out.println(handles.size());
If the browser has 3 tabs open, what will be printed?
Solution
Step 1: Understand what getWindowHandles() returns
It returns a set containing all window handles for every open tab or window.Step 2: Determine the size of the set
Since there are 3 tabs open, the set will contain 3 unique handles, so size() returns 3.Final Answer:
3 -> Option DQuick Check:
Number of tabs = size of handles set = 3 [OK]
- Assuming size() returns 1 for current window only
- Expecting an exception if multiple tabs exist
- Confusing getWindowHandles() with getWindowHandle()
Set<String> handles = driver.getWindowHandles(); String newWindow = handles.iterator().next(); driver.switchTo().window(newWindow);
But it always switches to the original window. What is the likely problem?
Solution
Step 1: Analyze iterator().next() behavior on a Set
Calling iterator().next() on a Set returns the first element, which is usually the original window handle.Step 2: Understand why it switches to original window
Since newWindow is assigned the original window handle, switching to it does not change the window.Final Answer:
Using iterator().next() returns the first handle, which is the original window -> Option BQuick Check:
iterator().next() = first handle (original window) [OK]
- Assuming iterator().next() gives the new window handle
- Thinking switchTo().window() needs window title
- Not checking if getWindowHandles() is empty
String originalHandle = driver.getWindowHandle(); and Set<String> allHandles = driver.getWindowHandles();, which code correctly switches to the new window?Solution
Step 1: Identify the original window handle
We have the original window handle stored inoriginalHandle.Step 2: Loop through all handles to find the new one
Iterate over all handles and switch to the one that is not equal to the original handle.Step 3: Switch to the new window
Once found, calldriver.switchTo().window(handle)and break the loop.Final Answer:
for (String handle : allHandles) { if (!handle.equals(originalHandle)) { driver.switchTo().window(handle); break; } } -> Option AQuick Check:
Switch to handle != originalHandle [OK]
- Switching to first handle without checking if it's original
- Using toArray()[0] which may be original window
- Switching to originalHandle instead of new window
Ready to prove it?
Pass the test and this pattern moves unknown
