Bird
Raised Fist0
Selenium Pythontesting~15 mins

New window and tab creation in Selenium Python - Build an Automation Script

Choose your learning style10 modes available
Verify new browser window and tab creation and switching
Preconditions (2)
Step 1: Open the browser and navigate to 'https://example.com'
Step 2: Click the button or link that opens a new browser window
Step 3: Switch to the new window
Step 4: Verify the new window's title is 'New Window Title'
Step 5: Close the new window and switch back to the original window
Step 6: Open a new browser tab
Step 7: Navigate the new tab to 'https://example.com/newtab'
Step 8: Verify the new tab's URL is 'https://example.com/newtab'
Step 9: Close the new tab and switch back to the original window
✅ Expected Result: The test should successfully open and switch between new window and tab, verify their titles and URLs, then close them and return to the original window without errors.
Automation Requirements - Selenium with Python
Assertions Needed:
Assert the new window's title matches 'New Window Title'
Assert the new tab's URL matches 'https://example.com/newtab'
Assert the driver switches back to the original window correctly
Best Practices:
Use explicit waits to handle page loads
Use driver.window_handles to manage windows and tabs
Use try-finally or context management to ensure windows/tabs are closed
Avoid hardcoded sleep; use WebDriverWait instead
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 WebDriver
with webdriver.Chrome() as driver:
    wait = WebDriverWait(driver, 10)
    # Step 1: Open main page
    driver.get('https://example.com')
    original_window = driver.current_window_handle

    # Step 2: Click element that opens new window
    # Assuming button with id 'open-window'
    open_window_button = wait.until(EC.element_to_be_clickable((By.ID, 'open-window')))
    open_window_button.click()

    # Step 3: Wait for new window and switch
    wait.until(EC.number_of_windows_to_be(2))
    new_window = [w for w in driver.window_handles if w != original_window][0]
    driver.switch_to.window(new_window)

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

    # Step 5: Close new window and switch back
    driver.close()
    driver.switch_to.window(original_window)

    # Step 6: Open new tab
    driver.execute_script("window.open('about:blank', '_blank');")
    wait.until(EC.number_of_windows_to_be(2))
    new_tab = [w for w in driver.window_handles if w != original_window][0]
    driver.switch_to.window(new_tab)

    # Step 7: Navigate new tab to URL
    driver.get('https://example.com/newtab')

    # Step 8: Verify new tab URL
    wait.until(EC.url_to_be('https://example.com/newtab'))
    assert driver.current_url == 'https://example.com/newtab', f"Expected URL 'https://example.com/newtab' but got '{driver.current_url}'"

    # Step 9: Close new tab and switch back
    driver.close()
    driver.switch_to.window(original_window)

    # Final assertion to confirm back to original window
    assert driver.current_window_handle == original_window, "Did not switch back to original window"

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 a button that opens a new window, waits until the new window appears, and switches to it.

It verifies the new window's title matches the expected value.

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

Next, it opens a new tab using JavaScript, switches to it, navigates to the specified URL, and verifies the URL.

Finally, it closes the new tab and switches back to the original window, asserting the switch was successful.

Explicit waits ensure the script waits for elements and conditions properly, avoiding flaky tests.

Using window handles allows precise control over browser windows and tabs.

Common Mistakes - 4 Pitfalls
Using time.sleep() instead of explicit waits
Not switching to the new window or tab before interacting
Hardcoding window handles or indexes
Not closing new windows or tabs after test
Bonus Challenge

Now add data-driven testing to open new windows and tabs with 3 different URLs and verify their titles or URLs accordingly.

Show Hint

Practice

(1/5)
1. Which Selenium Python command opens a new browser tab?
easy
A. driver.switch_to.new_window('tab')
B. driver.open_new_tab()
C. driver.create_tab()
D. driver.new_tab()

Solution

  1. Step 1: Understand Selenium's new window method

    Selenium provides driver.switch_to.new_window() to open new tabs or windows by specifying the type as 'tab' or 'window'.
  2. Step 2: Identify the correct argument for a new tab

    To open a new tab, the argument must be the string 'tab'. So the correct command is driver.switch_to.new_window('tab').
  3. Final Answer:

    driver.switch_to.new_window('tab') -> Option A
  4. Quick Check:

    Open new tab = driver.switch_to.new_window('tab') [OK]
Hint: Use 'tab' string inside new_window() to open a new tab [OK]
Common Mistakes:
  • Using non-existent methods like driver.open_new_tab()
  • Passing 'window' instead of 'tab' to open a tab
  • Trying driver.new_tab() which is invalid
2. Which of the following is the correct syntax to open a new browser window in Selenium Python?
easy
A. driver.switch_to.new_window('tab')
B. driver.switch_to.new_window('window')
C. driver.new_window('window')
D. driver.open_window('window')

Solution

  1. Step 1: Recall the method to open new windows

    Selenium's correct method is driver.switch_to.new_window() with argument 'window' to open a new window.
  2. Step 2: Check syntax correctness

    Only driver.switch_to.new_window('window') uses the correct method and argument. driver.new_window('window') and driver.open_window('window') use invalid method names, and driver.switch_to.new_window('tab') opens a tab, not a window.
  3. Final Answer:

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

    Open new window = driver.switch_to.new_window('window') [OK]
Hint: Use 'window' string inside new_window() to open a new window [OK]
Common Mistakes:
  • Confusing 'tab' and 'window' arguments
  • Using wrong method names like driver.new_window()
  • Missing the switch_to part in the command
3. What will be the output of the following Selenium Python code snippet?
driver.get('https://example.com')
original_handle = driver.current_window_handle
driver.switch_to.new_window('tab')
driver.get('https://selenium.dev')
print(len(driver.window_handles))
medium
A. 2
B. 1
C. 0
D. Error

Solution

  1. Step 1: Analyze window handles before and after new tab

    Initially, the driver opens one window (example.com). After driver.switch_to.new_window('tab'), a new tab opens, so total windows/tabs become 2.
  2. Step 2: Count window handles

    The driver.window_handles list contains all open windows/tabs. After opening the new tab, its length is 2.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    New tab adds one handle, total handles = 2 [OK]
Hint: Count window_handles after new_window() to get total tabs/windows [OK]
Common Mistakes:
  • Assuming window_handles length stays 1 after new tab
  • Confusing current_window_handle with window_handles list
  • Expecting an error due to missing switch focus
4. Identify the error in this Selenium Python code that tries to open a new tab:
driver.get('https://example.com')
driver.new_window('tab')
driver.get('https://selenium.dev')
medium
A. driver.new_window() is not a valid method
B. Cannot open new tab after driver.get()
C. Missing driver.switch_to before new_window()
D. driver.get() cannot be called twice

Solution

  1. Step 1: Check method usage for opening new tab

    The correct method to open a new tab is driver.switch_to.new_window('tab'). The code misses switch_to.
  2. Step 2: Understand why missing switch_to causes error

    Calling driver.new_window('tab') directly is invalid and will raise an AttributeError.
  3. Final Answer:

    Missing driver.switch_to before new_window() -> Option C
  4. Quick Check:

    Use driver.switch_to.new_window() to open tabs/windows [OK]
Hint: Always use driver.switch_to.new_window() to open tabs/windows [OK]
Common Mistakes:
  • Calling new_window() directly on driver
  • Thinking driver.get() limits opening new tabs
  • Believing driver.get() can only be called once
5. You want to open a new tab, switch to it, load a URL, then switch back to the original tab. Which code snippet correctly does this in Selenium Python?
hard
A. original = driver.current_window_handle driver.switch_to.new_window('tab') driver.switch_to.window(original) driver.get('https://selenium.dev')
B. driver.new_window('tab') driver.get('https://selenium.dev') driver.switch_to.window(original)
C. original = driver.current_window_handle driver.switch_to.new_window('window') driver.get('https://selenium.dev') driver.switch_to.window(original)
D. original = driver.current_window_handle driver.switch_to.new_window('tab') driver.get('https://selenium.dev') driver.switch_to.window(original)

Solution

  1. Step 1: Save original window handle before opening new tab

    Store driver.current_window_handle in a variable to switch back later.
  2. Step 2: Open new tab and load URL

    Use driver.switch_to.new_window('tab') to open a new tab, then load the URL with driver.get().
  3. Step 3: Switch back to original tab

    Use driver.switch_to.window(original) to return focus to the original tab.
  4. Final Answer:

    Code snippet D correctly opens a new tab, loads URL, and switches back -> Option D
  5. Quick Check:

    Save handle, open tab, load URL, switch back [OK]
Hint: Save handle, open tab, load URL, then switch back [OK]
Common Mistakes:
  • Not saving original window handle before opening new tab
  • Using 'window' instead of 'tab' when a tab is needed
  • Switching back to original tab before loading the URL in the new tab
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