Pop-up windows often appear during web testing. Handling them lets you control or close these windows to keep tests running smoothly.
Handling pop-up windows in 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 # Switch to alert pop-up alert = driver.switch_to.alert # Accept the alert alert.accept() # Dismiss the alert alert.dismiss() # Get alert text text = alert.text # Switch to new window main_window = driver.current_window_handle all_windows = driver.window_handles for window in all_windows: if window != main_window: driver.switch_to.window(window) break
Use driver.switch_to.alert for alert pop-ups like alerts, confirms, prompts.
Use driver.switch_to.window(window_handle) to switch between browser windows or tabs.
alert = driver.switch_to.alert alert.accept()
alert = driver.switch_to.alert alert.dismiss()
main_window = driver.current_window_handle for window in driver.window_handles: if window != main_window: driver.switch_to.window(window) break
This script opens a test page with JavaScript alerts, clicks a button to open an alert, reads the alert text, accepts it, and prints the alert message.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time # Setup driver (make sure chromedriver is in PATH) service = Service() driver = webdriver.Chrome(service=service) try: driver.get('https://the-internet.herokuapp.com/javascript_alerts') # Click button to trigger alert driver.find_element(By.XPATH, '//button[text()="Click for JS Alert"]').click() # Wait for alert and accept it WebDriverWait(driver, 5).until(EC.alert_is_present()) alert = driver.switch_to.alert alert_text = alert.text alert.accept() print(f"Alert text was: {alert_text}") finally: time.sleep(2) # Pause to see result driver.quit()
Always wait for the alert to appear before switching to it to avoid errors.
After handling a pop-up, switch back to the main window if needed.
Pop-ups can be alerts, confirms, prompts, or new browser windows/tabs.
Pop-up windows need special handling to interact with them during tests.
Use driver.switch_to.alert for alerts and driver.switch_to.window() for new windows.
Always wait for pop-ups before interacting to avoid test failures.
Practice
Solution
Step 1: Understand alert handling in Selenium
Alerts are special pop-ups that require switching to alert context usingdriver.switch_to.alert.Step 2: Identify the correct method to switch
Usingdriver.switch_to.alertaccesses the alert object directly, allowing interaction.Final Answer:
driver.switch_to.alert -> Option BQuick Check:
Alert pop-up switch = driver.switch_to.alert [OK]
- Using switch_to.window for alerts
- Trying to switch to alert as a frame
- Not switching before interacting with alert
Solution
Step 1: Recall method to switch windows
To switch to a new browser window, usedriver.switch_to.window()with the window handle.Step 2: Confirm correct syntax
The method requires the window handle string as an argument, sodriver.switch_to.window(window_handle)is correct.Final Answer:
driver.switch_to.window(window_handle) -> Option DQuick Check:
Switch window syntax = driver.switch_to.window(handle) [OK]
- Using switch_to.alert for windows
- Passing window handle to switch_to.frame
- Omitting the window handle argument
driver.get('https://example.com')
main_window = driver.current_window_handle
# Assume clicking button opens a new window
button = driver.find_element('id', 'openWindow')
button.click()
all_windows = driver.window_handles
for handle in all_windows:
if handle != main_window:
driver.switch_to.window(handle)
print(driver.title)
driver.close()
break
# Switch back to main window
driver.switch_to.window(main_window)
print(driver.title)Solution
Step 1: Understand window switching and closing
The code clicks a button that opens a new window, then switches to it, prints its title, closes it, and breaks the loop.Step 2: Switch back and print main window title
After closing the new window, the code switches back to the main window and prints its title.Final Answer:
Title of new window followed by title of main window -> Option AQuick Check:
Print new window title, then main window title [OK]
- Not switching back to main window before printing
- Trying to print after closing main window
- Assuming both titles print simultaneously
alert = driver.switch_to.alert() alert.accept()
Solution
Step 1: Check method usage for alert switching
driver.switch_to.alertis a property, not a method, so it should not have parentheses.Step 2: Correct the syntax
Remove parentheses: usealert = driver.switch_to.alertto get the alert object.Final Answer:
Incorrect use of parentheses after switch_to.alert -> Option AQuick Check:
switch_to.alert is property, no () [OK]
- Adding parentheses after switch_to.alert
- Confusing accept() with dismiss()
- Not switching to alert before accepting
Solution
Step 1: Save main window handle before opening pop-ups
Store the main window handle to return to it later safely.Step 2: Loop through all window handles, switch, close, and return
For each new window, switch to it, close it, then switch back to main window inside the loop to avoid stale window errors.Step 3: Avoid closing main window before others
Closing the main window first causes errors; it should be closed last or not at all during pop-up handling.Final Answer:
Switch to each new window, close it immediately, and switch back to main window inside the loop after each close -> Option CQuick Check:
Switch-close-switch back per window to avoid errors [OK]
- Closing main window before others
- Switching back only after closing all pop-ups
- Not storing main window handle before loop
Ready to prove it?
Pass the test and this pattern moves unknown
