from urllib.parse import quote from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait def data_page(title, heading): html = f""" {title}

{heading}

""" return "data:text/html;charset=utf-8," + quote(html) options = Options() options.add_argument("--headless=new") options.add_argument("--window-size=1280,720") driver = webdriver.Chrome(options=options) try: wait = WebDriverWait(driver, 10) driver.get(data_page("Original Context", "Original window")) original_handle = driver.current_window_handle print(f"original_title: {driver.title}") print(f"handles_before: {len(driver.window_handles)}") driver.switch_to.new_window("tab") new_handle = driver.current_window_handle driver.get(data_page("Second Context", "Second tab")) wait.until(EC.title_is("Second Context")) print(f"handles_after_open: {len(driver.window_handles)}") print(f"active_after_new_tab: {driver.title}") driver.switch_to.window(original_handle) print(f"active_after_return: {driver.title}") driver.switch_to.window(new_handle) driver.close() driver.switch_to.window(original_handle) print(f"handles_after_close: {len(driver.window_handles)}") print(f"active_final: {driver.title}") finally: driver.quit()