Chúng ta có thể làm việc với iframe trong Selenium WebDriver. Frame được định nghĩa bằng thẻ <iframe>, <frameset> hoặc <frame> trong mã HTML. Frame dùng để nhúng một tài liệu HTML vào trong tài liệu HTML khác.

Mặc định Selenium có quyền truy cập driver của trình duyệt cha. Để truy cập phần tử trong frame, focus của driver phải chuyển từ cửa sổ trình duyệt chính sang frame. Có nhiều phương pháp để chuyển sang frame:
switchTo().frame(id) - Truyền id hoặc name của frame làm tham số.
Cú pháp:
driver.switchTo().frame("id"), chuyển sang frame có id.switchTo().frame(m) - Truyền chỉ số (index) của frame làm tham số. Chỉ số bắt đầu từ 0.
Cú pháp:
driver.switchTo().frame(0), chuyển sang frame đầu tiên trong trang.switchTo().frame(webelement n) - Truyền webelement của frame làm tham số.
Cú pháp:
driver.switchTo().frame(l), chuyển sang frame với webelement l.switchTo().defaultContent() - Chuyển focus từ frame về trang chính.
Cú pháp:
driver.switchTo().defaultContent()
Ví dụ
Triển khai mã.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class iFrameMethods {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://the-internet.herokuapp.com/frames");
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
// Xác định phần tử và click
driver.findElement(By.partialLinkText("Nested")).click();
// Chuyển sang frame với tên frame
driver.switchTo().frame("frame-bottom");
WebElement m = driver.findElement(By.cssSelector("body"));
System.out.println("Frame text: " + m.getText());
driver.close();
}
}
Kết quả

Lưu ý quan trọng: Sau khi làm việc xong trong frame, hãy luôn gọi switchTo().defaultContent() để quay về ngữ cảnh chính, tránh lỗi khi thao tác các phần tử ngoài frame.