Bird
Raised Fist0
Selenium Javatesting~10 mins

Window handles (getWindowHandles) in Selenium Java - Test Execution Trace

Choose your learning style10 modes available
Test Overview

This test opens a webpage that opens a new browser window. It switches control to the new window using window handles and verifies the new window's title.

Test Code - JUnit with Selenium WebDriver
Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.Set;
import java.util.Iterator;
import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class WindowHandlesTest {
    WebDriver driver;

    @Before
    public void setUp() {
        driver = new ChromeDriver();
    }

    @Test
    public void testSwitchToNewWindow() {
        driver.get("https://example.com/page_with_popup");

        // Click button that opens new window
        driver.findElement(By.id("openWindowBtn")).click();

        // Get all window handles
        Set<String> windowHandles = driver.getWindowHandles();
        Iterator<String> iterator = windowHandles.iterator();

        String originalWindow = iterator.next();
        String newWindow = iterator.next();

        // Switch to new window
        driver.switchTo().window(newWindow);

        // Verify new window title
        String expectedTitle = "New Window Title";
        String actualTitle = driver.getTitle();
        assertEquals(expectedTitle, actualTitle);

        // Switch back to original window
        driver.switchTo().window(originalWindow);
    }

    @After
    public void tearDown() {
        driver.quit();
    }
}
Execution Trace - 8 Steps
StepActionSystem StateAssertionResult
1Test starts and Chrome browser opensBrowser window is open and ready—PASS
2Navigates to https://example.com/page_with_popupPage with a button that opens a new window is loaded—PASS
3Finds button with id 'openWindowBtn' and clicks itNew browser window opens alongside original window—PASS
4Calls driver.getWindowHandles() to get all window handlesTwo window handles are retrieved: original and newVerify two window handles existPASS
5Switches control to the new window using driver.switchTo().window(newWindow)Browser focus is on the new window—PASS
6Gets the title of the new windowNew window is fully loadedAssert that title equals 'New Window Title'PASS
7Switches back to original window using driver.switchTo().window(originalWindow)Browser focus returns to original window—PASS
8Test ends and browser closesAll browser windows closed—PASS
Failure Scenario
Failing Condition: The new window does not open or window handle is missing
Execution Trace Quiz - 3 Questions
Test your understanding
What does driver.getWindowHandles() return?
AThe title of the current window
BThe URL of the current page
CA set of all open browser window handles
DThe handle of the original window only
Key Result
Always retrieve all window handles after opening a new window and switch to the correct handle before interacting with that window.

Practice

(1/5)
1. What does the Selenium method getWindowHandles() return when called?
easy
A. A set of all open window handles (IDs) in the current WebDriver session
B. The handle of the current active window only
C. The title of the current browser window
D. The URL of the current page

Solution

  1. Step 1: Understand the purpose of getWindowHandles()

    This method is designed to return all window handles for every open window or tab in the current browser session.
  2. Step 2: Identify the return type

    The method returns a Set of Strings, each representing a unique window handle (ID).
  3. Final Answer:

    A set of all open window handles (IDs) in the current WebDriver session -> Option A
  4. Quick Check:

    getWindowHandles() = all window IDs [OK]
Hint: Remember: getWindowHandles() returns all window IDs as a set [OK]
Common Mistakes:
  • Confusing getWindowHandles() with getWindowHandle() which returns one handle
  • Expecting a list or array instead of a set
  • Thinking it returns page titles or URLs
2. Which of the following is the correct syntax to get all window handles in Selenium Java?
easy
A. List<String> handles = driver.getWindowHandles();
B. String handles = driver.getWindowHandles();
C. Set<String> handles = driver.getWindowHandles();
D. Set handles = driver.getWindowHandle();

Solution

  1. Step 1: Check the return type of getWindowHandles()

    The method returns a Set of Strings, so the variable must be declared as Set<String>.
  2. Step 2: Verify method name and syntax

    The correct method is getWindowHandles() (plural), and it belongs to the WebDriver instance named driver.
  3. Final Answer:

    Set<String> handles = driver.getWindowHandles(); -> Option C
  4. Quick Check:

    Correct syntax uses Set<String> and getWindowHandles() [OK]
Hint: Use Set<String> for getWindowHandles() return type [OK]
Common Mistakes:
  • Using List instead of Set for window handles
  • Calling getWindowHandle() instead of getWindowHandles()
  • Assigning to a String instead of a collection
3. Consider the following code snippet:
Set<String> handles = driver.getWindowHandles();
System.out.println(handles.size());

If the browser has 3 tabs open, what will be printed?
medium
A. An exception is thrown
B. 1
C. 0
D. 3

Solution

  1. Step 1: Understand what getWindowHandles() returns

    It returns a set containing all window handles for every open tab or window.
  2. 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.
  3. Final Answer:

    3 -> Option D
  4. Quick Check:

    Number of tabs = size of handles set = 3 [OK]
Hint: Size of getWindowHandles() set equals number of open tabs/windows [OK]
Common Mistakes:
  • Assuming size() returns 1 for current window only
  • Expecting an exception if multiple tabs exist
  • Confusing getWindowHandles() with getWindowHandle()
4. You wrote this code to switch to a new window:
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?
medium
A. getWindowHandles() returns an empty set
B. Using iterator().next() returns the first handle, which is the original window
C. switchTo().window() requires window title, not handle
D. You must convert the set to a list before switching

Solution

  1. 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.
  2. 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.
  3. Final Answer:

    Using iterator().next() returns the first handle, which is the original window -> Option B
  4. Quick Check:

    iterator().next() = first handle (original window) [OK]
Hint: iterator().next() returns first handle, often original window [OK]
Common Mistakes:
  • Assuming iterator().next() gives the new window handle
  • Thinking switchTo().window() needs window title
  • Not checking if getWindowHandles() is empty
5. You want to switch to a newly opened window different from the original one. Given String originalHandle = driver.getWindowHandle(); and Set<String> allHandles = driver.getWindowHandles();, which code correctly switches to the new window?
hard
A. for (String handle : allHandles) { if (!handle.equals(originalHandle)) { driver.switchTo().window(handle); break; } }
B. driver.switchTo().window(allHandles.iterator().next());
C. driver.switchTo().window(originalHandle);
D. driver.switchTo().window(allHandles.toArray()[0].toString());

Solution

  1. Step 1: Identify the original window handle

    We have the original window handle stored in originalHandle.
  2. 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.
  3. Step 3: Switch to the new window

    Once found, call driver.switchTo().window(handle) and break the loop.
  4. Final Answer:

    for (String handle : allHandles) { if (!handle.equals(originalHandle)) { driver.switchTo().window(handle); break; } } -> Option A
  5. Quick Check:

    Switch to handle != originalHandle [OK]
Hint: Loop handles, skip original, switch to new [OK]
Common Mistakes:
  • 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
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard