Bird
Raised Fist0
Selenium Pythontesting~15 mins

Window handles in Selenium Python - Build an Automation Script

Choose your learning style10 modes available
Verify switching between multiple browser windows
Preconditions (2)
Step 1: Open the main test page at 'https://example.com/main'
Step 2: Click the link with id 'open-new-window' that opens a new browser window
Step 3: Switch to the new window
Step 4: Verify the new window's title is 'New Window'
Step 5: Close the new window
Step 6: Switch back to the original window
Step 7: Verify the original window's title is 'Main Page'
✅ Expected Result: The test switches to the new window correctly, verifies its title, closes it, switches back to the original window, and verifies the original title.
Automation Requirements - Selenium with Python
Assertions Needed:
Verify new window title is 'New Window'
Verify original window title is 'Main Page'
Best Practices:
Use explicit waits where needed
Use window handles to switch windows
Close only the new window before switching back
Use try-finally or context management to ensure windows are closed
Automated Solution
Selenium Python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Initialize the Chrome driver
with webdriver.Chrome() as driver:
    wait = WebDriverWait(driver, 10)
    # Open the main page
    driver.get('https://example.com/main')
    original_window = driver.current_window_handle

    # Click the link that opens a new window
    wait.until(EC.element_to_be_clickable((By.ID, 'open-new-window'))).click()

    # Wait for the new window
    wait.until(EC.number_of_windows_to_be(2))

    # Get all window handles
    windows = driver.window_handles

    # Switch to the new window
    for window in windows:
        if window != original_window:
            driver.switch_to.window(window)
            break

    # Verify the new window title
    wait.until(EC.title_is('New Window'))
    assert driver.title == 'New Window', f"Expected title 'New Window' but got '{driver.title}'"

    # Close the new window
    driver.close()

    # Switch back to original window
    driver.switch_to.window(original_window)

    # Verify the original window title
    wait.until(EC.title_is('Main Page'))
    assert driver.title == 'Main Page', f"Expected title 'Main Page' but got '{driver.title}'"

This script uses Selenium WebDriver with Python to automate the test case.

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

Then it clicks the link that opens a new window and waits until two windows are open.

It switches to the new window by comparing window handles.

It waits for the new window's title to be 'New Window' and asserts it.

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

Finally, it waits for the original window's title to be 'Main Page' and asserts it.

Using explicit waits ensures the script waits for elements and conditions properly.

Using a context manager for the driver ensures the browser closes after the test.

Common Mistakes - 3 Pitfalls
Not waiting for the new window to open before switching
Closing the original window instead of the new window
Using hardcoded window handles
Bonus Challenge

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

Show Hint

Practice

(1/5)
1. What does driver.window_handles return in Selenium?
easy
A. The size of the browser window
B. The title of the current browser window
C. The URL of the current page
D. A list of all open browser window handles

Solution

  1. Step 1: Understand the purpose of driver.window_handles

    This command returns all the unique IDs (handles) of open browser windows or tabs controlled by Selenium.
  2. Step 2: Differentiate from other window properties

    It does not return titles, URLs, or sizes, only handles to switch between windows.
  3. Final Answer:

    A list of all open browser window handles -> Option D
  4. Quick Check:

    window_handles = list of handles [OK]
Hint: window_handles gives all open windows as a list [OK]
Common Mistakes:
  • Confusing window_handles with current window title
  • Expecting a single handle instead of a list
  • Using window_handles to get URL or size
2. Which of the following is the correct syntax to switch to a new window using Selenium in Python?
easy
A. driver.switch.window(new_window_handle)
B. driver.switch_to.window(new_window_handle)
C. driver.switchTo().window(new_window_handle)
D. driver.switch_window(new_window_handle)

Solution

  1. Step 1: Recall Selenium Python syntax for switching windows

    The correct method is driver.switch_to.window(handle) to switch context to the window with the given handle.
  2. Step 2: Identify incorrect syntax options

    Options B, C, and D use incorrect method names or Java-like syntax not valid in Python Selenium.
  3. Final Answer:

    driver.switch_to.window(new_window_handle) -> Option B
  4. Quick Check:

    Use switch_to.window() in Python Selenium [OK]
Hint: Use driver.switch_to.window(handle) to switch windows [OK]
Common Mistakes:
  • Using Java syntax like switchTo() in Python
  • Missing '_to' in switch_to
  • Using non-existent methods like switch_window
3. Given the following code snippet, what will be printed?
original_handle = driver.current_window_handle
all_handles = driver.window_handles
for handle in all_handles:
    if handle != original_handle:
        driver.switch_to.window(handle)
        print(driver.title)
        break
medium
A. The title of the original window
B. No output because loop never runs
C. The title of the new window (not original)
D. An error because of wrong handle usage

Solution

  1. Step 1: Understand the code logic

    The code saves the original window handle, then loops through all handles. It switches to the first handle that is not the original.
  2. Step 2: Determine what is printed

    After switching, it prints the title of the new window and breaks the loop, so it prints the new window's title.
  3. Final Answer:

    The title of the new window (not original) -> Option C
  4. Quick Check:

    Switch to non-original window, print title [OK]
Hint: Switch to non-original handle to get new window title [OK]
Common Mistakes:
  • Expecting original window title to print
  • Confusing current_window_handle with window_handles
  • Thinking loop does not run
4. What is wrong with this code snippet for switching to a new window?
new_window = driver.window_handles[1]
driver.switch_to.window(new_window)
driver.close()
medium
A. Index 1 may not exist if only one window is open
B. switch_to.window() is not a valid method
C. It closes the new window instead of switching back
D. driver.close() closes all windows

Solution

  1. Step 1: Analyze window_handles indexing

    Accessing index 1 assumes there are at least two windows open. If only one window exists, index 1 causes an IndexError.
  2. Step 2: Check other statements

    switch_to.window() is valid, driver.close() closes only current window, so no issue there.
  3. Final Answer:

    Index 1 may not exist if only one window is open -> Option A
  4. Quick Check:

    Check window_handles length before indexing [OK]
Hint: Always check window_handles length before indexing [OK]
Common Mistakes:
  • Assuming multiple windows always exist
  • Thinking driver.close() closes all windows
  • Confusing method names
5. You open a new tab in Selenium and want to switch to it, but you don't know its handle. Which code snippet correctly switches to the new tab?
hard
A. new_handle = [h for h in driver.window_handles if h != driver.current_window_handle][0] driver.switch_to.window(new_handle)
B. driver.switch_to.window(driver.current_window_handle + 1)
C. driver.switch_to.window(driver.window_handles[-1])
D. driver.switch_to.window(driver.window_handles[0])

Solution

  1. Step 1: Understand the problem

    You want to switch to the new tab but only know the current window handle, not the new one.
  2. Step 2: Analyze each option

    new_handle = [h for h in driver.window_handles if h != driver.current_window_handle][0] driver.switch_to.window(new_handle) finds the handle that is not the current one and switches to it correctly.
    driver.switch_to.window(driver.current_window_handle + 1) tries to add 1 to a string handle, causing error.
    driver.switch_to.window(driver.window_handles[-1]) switches to the last handle, which may work but is unsafe if multiple windows exist.
    driver.switch_to.window(driver.window_handles[0]) switches back to the original window, not the new tab.
  3. Final Answer:

    Use list comprehension to find new handle and switch -> Option A
  4. Quick Check:

    Find new handle by exclusion, then switch [OK]
Hint: Find new handle by excluding current, then switch [OK]
Common Mistakes:
  • Adding 1 to a string handle (invalid)
  • Assuming last handle is always new
  • Switching to original window by mistake
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