1.什么是iframe?和frame的区别?
我的理解是iframe就是嵌套在html中的html。
frame是划分整块页面,就像切豆腐,只能横切竖切,不能中间掏一个洞一样的切;
iframe我的理解就是可以任意定位区域的大小和位置,能中间掏一个洞一样的切豆腐。
2.iframe切换的方式
(1) 使用name
driver.switch_to.frame("iframe的name属性")
(2)使用index索引 (注意是从0开始的,eg.第3个iframe,索引就是2 )
driver.switch_to.frame(0)
(3)使用xpath
driver.switchTo().frame(driver.findElement(By.xpath(该iframe的xPath)));
ps:还有别的方法进行切换,像使用id,或者iframe是动态时可以使用定位div来进行切换,请自行查阅。
3.iframe的切换关系
若是想测试的按钮或者输入框啥的不再当前的iframe中就要切换iframe啦,放一个实例。
实例一:
点击【用户管理】(用户管理在默认页面中),当前iframe在默认页面中,然后想点击新增,但是新增在iframe中,此时就要先定位到这个iframe,driver要切换到这个iframe,然后就可以点击【新增】了:
(1)找到【新增】所在的iframe
(2)切换到这个iframe(它是第二个,所以索引是1),整个页面有三个iframe(代码太长不方便截图,只看上面一小部分就行啦)
driver.switchTo().frame(1); //法一:使用索引
driver.switchTo().frame("iframe2"); //法二:使用name (注意当iframe是动态切换时,不能使用name)
driver.switchTo().frame(driver.findElement(By.xpath("/html/body/div/div/div[3]/iframe[2]"))); //法三:使用xPath
实例二:
点击完【新增】(此时driver在第二个iframe),进入添加用户界面,此时想要填写【用户名称】:
(1)先说一下,这里的iframe的关系(由上图可知,三个iframe是并列的,可以画出下图):
所以以后进行iframe切换,就看路径途径那个iframe,就进行相应的切换就可以啦。
(2)第三个iframe是动态的,要动态切换,默认->1->默认->2(此iframe是动态的,即name是变化的,所以不能用name来定位。可以使用索引(注意索引从0开始)或者xpath。)
//先返回默认iframe
driver.switchTo().defaultContent();
//再跳转至第三个iframe driver.switchTo().frame(driver.findElement(By.xpath("/html/body/div/div/div[3]/iframe[3]")));//xpath
driver.switchTo().frame(2); //index
4.iframe的动态切换
实例二中,想要跳转的iframe是动态变化的(name不固定),所以不能使用name来定位iframe,而此时iframe又没有id,可以使用xPath,索引或者定位div 方法:
xPath:
driver.switchTo().frame(driver.findElement(By.xpath("ifranme的xPath")));//xpath
定位div:
driver.switchTo().frame(driver.findElement(By.xpath("div的xPath/iframe[3]")));
ps:此处格式为 driver.switchTo().frame(driver.findElement(By.xpath("div的xPath/iframe[n]")));
需要填入div的xPath,n:代表div中第几个iframe。
索引:
driver.switchTo().frame(2); //index