Nested iFrames let you test web pages inside other web pages. They help check content that is inside multiple layers of frames.
Nested iFrames in Selenium Python
driver.switch_to.frame('outer_frame_name_or_id') driver.switch_to.frame('inner_frame_name_or_id') # Now inside inner frame # Perform actions here driver.switch_to.default_content() # To go back to main page
You must switch step-by-step from the main page to outer frame, then to inner frame.
Use driver.switch_to.default_content() to return to the main page before switching to another frame.
driver.switch_to.frame('frame1') driver.switch_to.frame('frame2') element = driver.find_element(By.ID, 'button') element.click()
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR, 'iframe.outer')) driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR, 'iframe.inner'))
This script opens a page with nested iframes, switches step-by-step to the inner iframe, reads a heading text, prints it, then closes the browser.
from selenium import webdriver from selenium.webdriver.common.by import By import time # Setup driver (make sure chromedriver is in PATH) driver = webdriver.Chrome() # Open a test page with nested iframes driver.get('https://www.w3schools.com/html/tryit.asp?filename=tryhtml_iframe_nested') # Switch to outer iframe by id driver.switch_to.frame('iframeResult') # Switch to inner iframe by tag name (only one inside outer) inner_iframe = driver.find_element(By.TAG_NAME, 'iframe') driver.switch_to.frame(inner_iframe) # Find heading inside inner iframe heading = driver.find_element(By.TAG_NAME, 'h1') print(heading.text) # Should print 'This page is displayed in an iframe' # Go back to main content driver.switch_to.default_content() # Close driver driver.quit()
Always switch frames in order: main page -> outer frame -> inner frame.
Use driver.switch_to.default_content() to reset to the main page before switching to another frame.
Locators like name, id, or WebElement can be used to switch frames.
Nested iFrames require switching frames step-by-step to reach inner content.
Use driver.switch_to.frame() to enter frames and driver.switch_to.default_content() to return to main page.
Testing inside nested frames helps verify content hidden inside multiple layers.