iFrame的处理
Frame或iFrame,iframe中又是一个完整的html代码,为一个页面中嵌套另一个页面
思路:
1. 定位iFrame
2. driver控制权交给iFrame
3. 操作iFrame里面的元素
4. driver控制权交回原页面
代码例子:
三种定位iframe方法
public void iframeTest() throws InterruptedException {
//iframe窗口的跳转
driver.get("file:///D:/testing/webdriver_demo/selenium_html/index.html");
driver.findElement(By.id("user")).sendKeys("this is iframe");
Thread.sleep(3000);
//把控制权转交给iframe界面,,id或者属性值为aa的iframe窗口,下面一个方法是没有Id和属性值的情况
driver.switchTo().frame("aa");
//点击iframe窗口的Linktext为baidu的按钮
driver.findElement(By.linkText("baidu")).click();
//把控制权回到顶部页面
driver.switchTo().defaultContent();
Thread.sleep(3000);
driver.findElement(By.id("user")).clear();
driver.findElement(By.id("user")).sendKeys("this is another iframe");
}
public void iframeTest1() throws InterruptedException {
//iframe窗口的跳转,运行整个方法时,由于是testng来执行的脚本,是根据方法名的ASKI值来先后执行的,所以是先运行iframetest
driver.get("file:///D:/testing/webdriver_demo/selenium_html/index.html");
driver.findElement(By.id("user")).sendKeys("this is iframe");
//把控制权转交给iframe界面,如果没有id和属性值,把整个iframe当作一个元素来定位
WebElement element = driver.findElement(By.xpath("/html/body/div/table/tbody/tr[15]/td[2]/iframe"));
driver.switchTo().frame(element);
//点击iframe窗口的Linktext为baidu的按钮
driver.findElement(By.linkText("baidu")).click();
//把控制权回到顶部页面,任何界面回到顶部页面都是defaultContent方法,回到另一个页面都是frame方法,只能一级一级的跳
driver.switchTo().defaultContent();
Thread.sleep(3000);
driver.findElement(By.id("user")).clear();
driver.findElement(By.id("user")).sendKeys("this is another iframe");
}
如果有多层iFrame,控制权则层层转交