Frames are separate HTML documents embedded within a page. Selenium requires explicit switching to interact with frame elements.
// Switch to frame by index
driver.switchTo().frame(0);
// Switch to frame by name or ID
driver.switchTo().frame("frameName");
// Switch to frame by WebElement
WebElement frameElement = driver.findElement(By.id("frameId"));
driver.switchTo().frame(frameElement);
// Switch back to main content
driver.switchTo().defaultContent();
// Switch to parent frame (if nested frames)
driver.switchTo().parentFrame();
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.