如何处理具有相同类名的2个iframe

时间:2013-12-17 12:11:58

标签: java selenium selenium-webdriver

标题部分编辑器

<iframe class="wysihtml5-sandbox" width="0" height="0" frameborder="0" security="restricted" allowtransparency="true" marginwidth="0" marginheight="0" style="display: inline-block; min-height: 160px;;">
<!DOCTYPE html>
<html>
<head>
<body class="wysihtml5-editor" contenteditable="true" spellcheck="true" style="overflow: hidden; min-height: 0px; background-color:;: rgb(255, 255, 255">
</html>
</iframe>
</div>
<div class="p-help-block"></div>
</div>
</div>

页脚部分编辑器

<iframe class="wysihtml5-sandbox" width="0" height="0" frameborder="0" security="restricted" allowtransparency="true" marginwidth="0" marginheight="0" style="display: inline-block; min-height: 160px; background-color: rgb(255, 255, 255>
 <!DOCTYPE html>
 <html>
  <head>
  <body class="wysihtml5-editor" contenteditable="true" spellcheck="true" style="overflow: hidden; min-height: 0px; background-color: rgb(255, 255, 255">
  </html>
  </iframe>
  </div>
  <div class="p-help-block"></div>
  </div>

我可以通过下面的代码

在标题部分编辑器中输入文本
driver.findElement(By.id("div_1_1_3_1_3_1_2_1_1_1_1")) ; 
driver.switchTo().frame(driver.findElement(By.className("wysihtml5-sandbox"))); 
System.out.println("inside the header frame");
driver.findElement(By.className("wysihtml5-editor")).sendKeys("header section quote approval details");

的Thread.sleep(10000);    System.out.println(“在标题框内输入文字”);

但是webdriver控件没有导航到页脚部分编辑器输入文本在我试过的代码下面

driver.findElement(By.id("div_1_1_3_1_2_1_1_1_1_1_4-in")).click();
Thread.sleep(5000);
System.out.println("inside the footer frame");
Thread.sleep(10000);
driver.findElement(By.className("wysihtml5-editor")).sendKeys("footer section quote approval details");
System.out.println("entered text inside footer frame");

注意:请让我知道解决方案,因为我在我的应用程序的许多阶段都面临同样的问题,我正在使用selenium webdriver进行自动化

2 个答案:

答案 0 :(得分:4)

使用XPath表达式找到<iframe>

第一个:

driver.findElement(By.xpath("//iframe[@class='wysihtml5-sandbox'][1]"));

对于第二个:

driver.findElement(By.xpath("//iframe[@class='wysihtml5-sandbox'][2]"));

或者,请开发人员向不同的iframe添加id,以便您区分它们。这将是一个比上面的XPath解决方案更优雅的解决方案,因为它意味着即使将更多的iframe添加到文档中,您的测试仍会继续有效。

答案 1 :(得分:0)

您也可以尝试使用iframe索引,如下所示:

driver.switchTo().frame(0); //To switch to first iframe
//Few actions
driver.switchTo().frame(1); //To switch to second iframe