An iframe embeds another HTML document inside the current page. Selenium must switch context into the iframe before interacting with its elements.
Switch by index:
Java
driver.switchTo().frame(0);
Switch by name or id:
Java
driver.switchTo().frame("iframeName");
driver.switchTo().frame("iframeId");
Switch by WebElement:
Java
WebElement iframe = driver.findElement(By.tagName("iframe"));
driver.switchTo().frame(iframe);
Interact with elements inside iframe:
Java
driver.switchTo().frame("loginFrame");
driver.findElement(By.id("username")).sendKeys("admin");
driver.findElement(By.id("password")).sendKeys("pass123");
driver.findElement(By.id("loginBtn")).click();
Switch back to main document:
Java
driver.switchTo().defaultContent();
Switch to parent frame (nested iframes):
Java
driver.switchTo().parentFrame();
Best practice — always switch back:
Java
try {
driver.switchTo().frame("myFrame");
// interact with elements
} finally {
driver.switchTo().defaultContent();
}
