Switching between windows in Selenium Java - Build an Automation Script
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.
Now add data-driven testing with 3 different links that open different new windows and verify their titles accordingly.
Practice
getWindowHandle() method return in Selenium WebDriver?Solution
Step 1: Understand getWindowHandle() purpose
This method returns a unique string ID representing the current window or tab the driver is controlling.Step 2: Differentiate from getWindowHandles()
Unlike getWindowHandles(), which returns all window IDs, getWindowHandle() returns only the current one.Final Answer:
The unique ID of the current browser window or tab -> Option AQuick Check:
getWindowHandle() = current window ID [OK]
- Confusing getWindowHandle() with getWindowHandles()
- Thinking it returns window title or URL
- Assuming it returns multiple windows
Solution
Step 1: Recall correct switch syntax
The correct method chain is driver.switchTo().window(handle) to switch focus to a window by its handle.Step 2: Identify incorrect options
Options A, B, and C use invalid method names or chaining not supported by Selenium WebDriver API.Final Answer:
driver.switchTo().window(windowHandle); -> Option CQuick Check:
Use switchTo().window() to switch windows [OK]
- Using incorrect method names like switchToWindow()
- Missing the switchTo() part before window()
- Trying to call window() directly on driver
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?Solution
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.Step 2: Switch back and print title
After closing other windows, it switches back to mainWindow and prints its title.Final Answer:
Close all windows except the main one and print the main window's title -> Option BQuick Check:
Close others, keep main, print main title [OK]
- Closing main window inside the loop
- Not switching back to main window before printing title
- Assuming all windows are closed
Set<String> windows = driver.getWindowHandles();
for (String win : windows) {
if (win != driver.getWindowHandle()) {
driver.switchTo().window(win);
break;
}
}Solution
Step 1: Check string comparison method
In Java, strings must be compared with .equals(), not '!=' which compares references.Step 2: Identify impact of wrong comparison
Using '!=' may cause the condition to fail unexpectedly, so the switch may not happen correctly.Final Answer:
Using '!=' to compare strings instead of .equals() -> Option AQuick Check:
Use .equals() for string comparison [OK]
- Using '==' or '!=' for string comparison
- Forgetting to break after switching
- Confusing getWindowHandle() and getWindowHandles()
Solution
Step 1: Understand window switching by handle
You cannot switch windows by title directly; you must switch by handle and then check the title.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.Final Answer:
Iterate all window handles, switch to each, check title, break when title matches "Dashboard" -> Option DQuick Check:
Switch by handle, check title, then stop [OK]
- Trying to switch using title as window handle
- Not looping through all windows
- Assuming first window is always the target
Ready to prove it?
Pass the test and this pattern moves unknown
