在 Web 應用中經常會遇到 frame/iframe 表單嵌套頁面的應用, WebDriver 只能在一個頁面上對元素識別與 定位, 對于 frame/iframe 表單內嵌頁面上的元素無法直接定位。 這時就需要通過 switchTo().frame()方法將當前定 位的主體切換為 frame/iframe 表單的內嵌頁面中。
<html><body>...<iframe id="x-URS-iframe" ...><html><body>...<input name="email" >
126郵箱登錄框的結構大概是這樣子的,想要操作登錄框必須要先切換到iframe表單。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;public class MailLogin {public static void main(String[] args){WebDriver driver = new ChromeDriver();driver.get("http://www.126.com");WebElement xf = driver.findElement(By.xpath("//*[@id='loginDiv']/iframe"));driver.switchTo().frame(xf);driver.findElement(By.name("email")).clear();driver.findElement(By.name("email")).sendKeys("username");driver.findElement(By.name("password")).clear();driver.findElement(By.name("password")).sendKeys("password");driver.findElement(By.id("dologin")).click();driver.switchTo().defaultContent();//……}
}
如果完成了在當前表單上的操作,則可以通過switchTo().defaultContent()方法跳出表單。