</>

Technology

Scenario-Based

Difficulty

Intermediate

Interview Question

How do you handle iframes in Selenium WebDriver?

Answer

Handling iFrames in Selenium

An iframe is an HTML document embedded inside another. Elements inside an iframe are not accessible from the parent page context — you must switch into it first.

Switch by Index

Java
// Switch to first iframe on page (0-based index)
driver.switchTo().frame(0);

// Interact with element inside iframe
driver.findElement(By.id("username")).sendKeys("testuser");

// Switch back to main page
driver.switchTo().defaultContent();

Switch by Name or ID

Java
// <iframe name="loginFrame" id="loginFrame">
driver.switchTo().frame("loginFrame");
driver.findElement(By.name("password")).sendKeys("secret");
driver.switchTo().defaultContent();

Switch by WebElement

Java
WebElement iframeElement = driver.findElement(By.cssSelector("iframe.content-frame"));
driver.switchTo().frame(iframeElement);

driver.findElement(By.id("submitBtn")).click();
driver.switchTo().defaultContent();

Nested iFrames

Java
// Switch to outer iframe
driver.switchTo().frame("outerFrame");

// Then switch to inner iframe within it
driver.switchTo().frame("innerFrame");

driver.findElement(By.id("element")).click();

// Go up one level (to outerFrame)
driver.switchTo().parentFrame();

// Go back to main page
driver.switchTo().defaultContent();

Wait for iFrame to Load

Java
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(
    By.cssSelector("iframe#content")
));
// Now inside the iframe
driver.findElement(By.id("element")).click();

Common Mistake

Java
// BAD — trying to find element inside iframe without switching
driver.findElement(By.id("insideIframe")); // NoSuchElementException

// GOOD
driver.switchTo().frame("myFrame");
driver.findElement(By.id("insideIframe")); // works
driver.switchTo().defaultContent();

Always Remember

  • After switching to an iframe, all findElement calls target inside the iframe
  • Use defaultContent() to return to the top-level page
  • Use parentFrame() to go up one level in nested iframes

Follow AutomateQA

Related Topics