Bird
Raised Fist0
Selenium Javatesting~15 mins

Switching between windows in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Verify switching between browser windows
Preconditions (2)
Step 1: Click the link or button that opens a new window
Step 2: Switch the WebDriver focus to the newly opened window
Step 3: Verify the title of the new window matches the expected title
Step 4: Close the new window
Step 5: Switch the WebDriver focus back to the original window
Step 6: Verify the title of the original window matches the expected title
✅ Expected Result: The test should successfully switch to the new window, verify its title, close it, then switch back to the original window and verify its title
Automation Requirements - Selenium WebDriver with Java
Assertions Needed:
Assert the title of the new window is as expected
Assert the title of the original window is as expected after switching back
Best Practices:
Use explicit waits if needed before switching windows
Store window handles properly to switch between them
Close only the new window before switching back
Use try-finally or proper cleanup to avoid leaving windows open
Automated Solution
Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import java.time.Duration;
import java.util.Set;

public class WindowSwitchTest {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

        try {
            driver.get("https://example.com/mainpage");
            String originalWindow = driver.getWindowHandle();

            // Click the link that opens a new window
            driver.findElement(By.id("open-new-window")).click();

            // Wait for the new window or tab
            wait.until(driver1 -> driver1.getWindowHandles().size() > 1);

            Set<String> allWindows = driver.getWindowHandles();
            String newWindow = null;
            for (String windowHandle : allWindows) {
                if (!windowHandle.equals(originalWindow)) {
                    newWindow = windowHandle;
                    break;
                }
            }

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

            // Verify the title of the new window
            String expectedNewTitle = "New Window Title";
            String actualNewTitle = driver.getTitle();
            if (!actualNewTitle.equals(expectedNewTitle)) {
                throw new AssertionError("New window title mismatch. Expected: " + expectedNewTitle + ", but got: " + actualNewTitle);
            }

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

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

            // Verify the title of the original window
            String expectedOriginalTitle = "Main Page Title";
            String actualOriginalTitle = driver.getTitle();
            if (!actualOriginalTitle.equals(expectedOriginalTitle)) {
                throw new AssertionError("Original window title mismatch. Expected: " + expectedOriginalTitle + ", but got: " + actualOriginalTitle);
            }

            System.out.println("Test passed: Window switching works correctly.");

        } finally {
            driver.quit();
        }
    }
}

This code uses Selenium WebDriver with Java to automate switching between browser windows.

First, it opens the main page and stores the original window handle.

Then it clicks a button that opens a new window and waits until the new window appears.

It finds the new window handle by comparing all handles to the original one.

Next, it switches to the new window and asserts the title matches the expected title.

After verification, it closes the new window and switches back to the original window.

Finally, it asserts the original window's title to confirm focus is back.

The try-finally block ensures the browser closes even if assertions fail.

Common Mistakes - 3 Pitfalls
Not waiting for the new window to open before switching
Hardcoding window handles instead of retrieving them dynamically
Closing the original window instead of the new window
Bonus Challenge

Now add data-driven testing with 3 different links that open different new windows and verify their titles accordingly.

Show Hint

Practice

(1/5)
1. What does the getWindowHandle() method return in Selenium WebDriver?
easy
A. The unique ID of the current browser window or tab
B. A list of all open browser windows or tabs
C. The title of the current browser window
D. The URL of the current page

Solution

  1. Step 1: Understand getWindowHandle() purpose

    This method returns a unique string ID representing the current window or tab the driver is controlling.
  2. Step 2: Differentiate from getWindowHandles()

    Unlike getWindowHandles(), which returns all window IDs, getWindowHandle() returns only the current one.
  3. Final Answer:

    The unique ID of the current browser window or tab -> Option A
  4. Quick Check:

    getWindowHandle() = current window ID [OK]
Hint: Remember: singular handle = current window only [OK]
Common Mistakes:
  • Confusing getWindowHandle() with getWindowHandles()
  • Thinking it returns window title or URL
  • Assuming it returns multiple windows
2. Which of the following is the correct syntax to switch to a new window using its handle in Selenium Java?
easy
A. driver.switchToWindowHandle(windowHandle);
B. driver.switchToWindow(windowHandle);
C. driver.switchTo().window(windowHandle);
D. driver.switch.window(windowHandle);

Solution

  1. Step 1: Recall correct switch syntax

    The correct method chain is driver.switchTo().window(handle) to switch focus to a window by its handle.
  2. Step 2: Identify incorrect options

    Options A, B, and C use invalid method names or chaining not supported by Selenium WebDriver API.
  3. Final Answer:

    driver.switchTo().window(windowHandle); -> Option C
  4. Quick Check:

    Use switchTo().window() to switch windows [OK]
Hint: Use driver.switchTo().window(handle) always [OK]
Common Mistakes:
  • Using incorrect method names like switchToWindow()
  • Missing the switchTo() part before window()
  • Trying to call window() directly on driver
3. Consider the following code snippet:
String mainWindow = driver.getWindowHandle();
Set<String> allWindows = driver.getWindowHandles();
for (String window : allWindows) {
    if (!window.equals(mainWindow)) {
        driver.switchTo().window(window);
        driver.close();
    }
}
driver.switchTo().window(mainWindow);
System.out.println(driver.getTitle());
What will this code do?
medium
A. Close all windows including the main one and throw an error
B. Close all windows except the main one and print the main window's title
C. Close only the main window and print the last window's title
D. Switch to the last window and print its title without closing any window

Solution

  1. Step 1: Analyze window handles and loop

    The code saves the main window handle, loops through all windows, and closes any window not equal to mainWindow.
  2. Step 2: Switch back and print title

    After closing other windows, it switches back to mainWindow and prints its title.
  3. Final Answer:

    Close all windows except the main one and print the main window's title -> Option B
  4. Quick Check:

    Close others, keep main, print main title [OK]
Hint: Close non-main windows, then switch back [OK]
Common Mistakes:
  • Closing main window inside the loop
  • Not switching back to main window before printing title
  • Assuming all windows are closed
4. Identify the error in this Selenium Java code snippet for switching to a new window:
Set<String> windows = driver.getWindowHandles();
for (String win : windows) {
    if (win != driver.getWindowHandle()) {
        driver.switchTo().window(win);
        break;
    }
}
medium
A. Using '!=' to compare strings instead of .equals()
B. Missing driver.quit() after switching windows
C. Not closing the previous window before switching
D. Using getWindowHandles() instead of getWindowHandle()

Solution

  1. Step 1: Check string comparison method

    In Java, strings must be compared with .equals(), not '!=' which compares references.
  2. Step 2: Identify impact of wrong comparison

    Using '!=' may cause the condition to fail unexpectedly, so the switch may not happen correctly.
  3. Final Answer:

    Using '!=' to compare strings instead of .equals() -> Option A
  4. Quick Check:

    Use .equals() for string comparison [OK]
Hint: Always use .equals() to compare strings in Java [OK]
Common Mistakes:
  • Using '==' or '!=' for string comparison
  • Forgetting to break after switching
  • Confusing getWindowHandle() and getWindowHandles()
5. You have a test that opens multiple tabs. You want to switch to the tab with title "Dashboard" and perform actions there. Which approach correctly switches to that window?
hard
A. Close all windows except the first, then assume it is "Dashboard"
B. Use driver.switchTo().window("Dashboard"); directly with the title
C. Call driver.getWindowHandle() repeatedly until title is "Dashboard"
D. Iterate all window handles, switch to each, check title, break when title matches "Dashboard"

Solution

  1. Step 1: Understand window switching by handle

    You cannot switch windows by title directly; you must switch by handle and then check the title.
  2. Step 2: Iterate handles and check titles

    Loop through all window handles, switch to each, check if title equals "Dashboard", then break to stay on that window.
  3. Final Answer:

    Iterate all window handles, switch to each, check title, break when title matches "Dashboard" -> Option D
  4. Quick Check:

    Switch by handle, check title, then stop [OK]
Hint: Switch windows by handle, verify title, then stop [OK]
Common Mistakes:
  • Trying to switch using title as window handle
  • Not looping through all windows
  • Assuming first window is always the target
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