NewDreamTester 发表于 2017-11-9 11:30:43

selenium的iFrame处理

本帖最后由 NewDreamTester 于 2017-11-9 11:32 编辑

有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到。selenium webdriver中提供了进入一个iframe的方法:
WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)
也提供了一个返回default content的方法:
WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()
我们拿2345网址导航来做示例,2345首页的定制天气模块,是一个iframe,
如果我们想去选择其他城市天气必须选进入这个iframe。https://wenku.baidu.com/content/c7705abb453610661ed9f4ed?m=60f13ecd3971ad7c235511013d14d465&type=pic&src=d19b4de558d0a35b44dae9d03c64a928.png
https://wenku.baidu.com/content/c7705abb453610661ed9f4ed?m=60f13ecd3971ad7c235511013d14d465&type=pic&src=65d485d97c2c6363e6d2817b77ea930e.png

那么我先进入这个iframe,然后在进行选择城市的操作(注:选择城市是4.3章节的内容)
核心代码:
driver.switchTo().frame(“city_set_ifr”); //传入的是iframe的ID
注意,进入iframe方法可以传入三种类型不同参数:
https://wenku.baidu.com/content/c7705abb453610661ed9f4ed?m=60f13ecd3971ad7c235511013d14d465&type=pic&src=49c29aed52e2aad93217b232e5866c6e.png
int类型 – iframe在页面中的位置,第几个
String类型 – iframe的名字 比如id
WebElement类型 - 这个iframe的元素定位
接下来在进行选择城市的操作
如果要返回到以前的默认content,可以使用:
dr.switchTo().defaultContent();
如果不使用此代码,就不能退出当前iframe,也就是说iframe之外的页面内容你是不能定位和访问的。


lsekfe 发表于 2017-11-9 13:18:18

分享的不错,就是图片裂开了!
页: [1]
查看完整版本: selenium的iFrame处理