Closing browser (close vs quit) in Selenium Python - Automation Approaches Compared
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchWindowException import time # Setup WebDriver (adjust path to chromedriver as needed) service = Service() driver = webdriver.Chrome(service=service) try: # Step 1 & 2: Open browser and navigate driver.get('https://example.com') original_window = driver.current_window_handle # Step 3: Open new window using JavaScript driver.execute_script('window.open("https://example.com", "_blank");') time.sleep(1) # Wait for new window to open # Step 4: Switch to new window windows = driver.window_handles assert len(windows) == 2, f'Expected 2 windows, found {len(windows)}' new_window = [w for w in windows if w != original_window][0] driver.switch_to.window(new_window) # Step 5: Close current window driver.close() # Step 6: Verify one window remains remaining_windows = driver.window_handles assert len(remaining_windows) == 1, f'Expected 1 window after close(), found {len(remaining_windows)}' # Step 7: Switch back to original window driver.switch_to.window(original_window) # Step 8: Quit driver driver.quit() # Step 9: Verify browser closed by checking exception on window_handles try: _ = driver.window_handles raise AssertionError('driver.window_handles should fail after quit()') except Exception: pass # Expected exception except Exception as e: driver.quit() raise e
This script opens a browser and navigates to example.com. It then opens a new browser tab using JavaScript and switches to it. After switching, it calls driver.close() to close only the current tab. We verify that one window remains open by checking driver.window_handles. Then, we switch back to the original window and call driver.quit() to close all browser windows and end the session. Finally, we verify that the browser is closed by attempting to access driver.window_handles, which should raise an exception.
Explicit waits are replaced by time.sleep(1) here for simplicity, but in real tests, use Selenium explicit waits. The try-except block ensures the driver quits even if an error occurs, preventing orphan browser processes.
Now add data-driven testing to open different URLs in new tabs and verify closing behavior for each.