from pathlib import Path import shutil from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait page_url = (Path(__file__).parent / "iframe-demo.html").resolve().as_uri() options = webdriver.ChromeOptions() options.add_argument("--headless=new") options.add_argument("--window-size=1280,720") driver_path = shutil.which("chromedriver") service = Service(driver_path) if driver_path else Service() driver = webdriver.Chrome(service=service, options=options) wait = WebDriverWait(driver, 10) try: driver.get(page_url) wait.until( EC.frame_to_be_available_and_switch_to_it( (By.ID, "checkout-frame") ) ) email = wait.until( EC.visibility_of_element_located((By.ID, "customer-email")) ) email.send_keys("qa@example.net") driver.find_element(By.ID, "confirm-payment").click() wait.until( EC.text_to_be_present_in_element( (By.ID, "frame-status"), "Ready for qa@example.net", ) ) frame_status = driver.find_element(By.ID, "frame-status").text driver.switch_to.default_content() parent_status = wait.until( EC.visibility_of_element_located((By.ID, "parent-status")) ).text assert frame_status == "Ready for qa@example.net" assert parent_status == "Parent document restored" print(f"frame_status: {frame_status}") print(f"parent_status: {parent_status}") finally: driver.quit()