使用Selenium查找活动的iframe

时间:2014-12-12 10:50:52

标签: selenium iframe

我正在尝试使用Selenium WebDriver导航页面,并且遇到问题,此页面中最多有3个iframe,但只有一个是“活动”,其他iframe在显示器上设置:none 每当我从一个页面移动到另一个页面时,新页面将被加载到另一个iframe中,但似乎没有模式,所以我无法使用

_driver.findElements(By.tagName("iframe")).get(index);

iframe看起来像这样:

<iframe id="IF0" class="SOMETHING" width="100%" scrolling="no" height="100%" frameborder="0" target="main" src="../myPath/Blank.html" name="IF0" style="position: absolute; border-width: 0px; width: 100%; height: 100%; display: block; z-index: 10;">

<iframe id="IF1" class="SOMETHING" scrolling="no" frameborder="0" name="IF1" style="display: none; position: absolute; width: 100%; height: 100%; overflow: hidden; z-index: -1;">

<iframe id="IF2" class="SOMETHING" scrolling="no" frameborder="0" name="IF2" style="display: none; position: absolute; width: 100%; height: 100%; overflow: hidden; z-index: -1;">

我尝试使用By.xpath之类的

WebDriverWait wait1 = new WebDriverWait(_driver, 60);
    wait1.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By
            .xpath("//*[@target='main']")));

但它不起作用。有没有其他方法可以找出哪个iframe可见而不尝试使用Exceptions逐个加载它们?

1 个答案:

答案 0 :(得分:0)

请尝试使用此代码。它将切换到具有&#39;目标属性的 iframe&#39;作为&#39;主要&#39;和&#39;显示属性&#39; as&#39;阻止&#39;

try{
  WebDriverWait wait1 = new WebDriverWait(_driver, 60);
  wait1.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@target='main' and @display='block']")));
}catch(Throwable e){
  System.err.println("Error while switching to frame. "+e.getMessage());
}

修改

否则,如果一次只能看到一帧,请尝试以下代码切换到它:

driver.switchTo().frame(0);