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()