如何使用java在Selenium WebDriver中处理iframe

2022-09-01 01:13:03
<div>    
  <iframe id="cq-cf-frame ">    
    <iframe id="gen367">   
      <body spellcheck="false" id="CQrte" style="height: 255px; font-size: 12px; font-family:tahoma,arial,helvetica,sans-serif; background-image: url(&quot;/libs/cq/ui/widgets/themes/default/ext/form/text-bg.gif&quot;); background-repeat: repeat-x; background-attachment: fixed;">
        <p>4t43t4<br></p>
      </body >
    </iframe>
  </iframe>    
</div> 

在这种情况下,有一个 under 。我必须选择外在去内在,并在内在的身体中书写。iframeiframeiframeiframeiframe

接下来,我必须从内部到外部出来,然后单击“确定”按钮(位于外部)。iframeiframeiframe

以下是我的代码

/*Line 1 */ driver.switchTo().frame("cq-cf-frame");
/*     2 */ driver.findElement(By.css("#extdd-9 > div.tblRow >  input.edititem").click();
/*     3 */ driver.switchTo().Frame("cq-gen379");
/*     4 */ driver.findElement(By.id("CQrte").sendKeys("Tnx");  
/*     5 */ selenium.selectFrame("relative=up");       
/*     6 */ driver.findElement(By.xpath("//button[text()='OK']")).click(); 

以下是我的问题:

我的测试代码工作正常,直到第4行,即写入正文,但我想从内部到外部出来,它说元素没有找到。iframe//button[text()='OK']

我尝试使用索引,父母,亲戚,但没有运气。

注意:如果我没有选择内框()。我可以点击“确定”按钮。cq-gen379


答案 1

在Webdriver中,您应该使用来退出框架。您需要先退出所有帧,然后再次切换到外帧。driver.switchTo().defaultContent();

// between step 4 and step 5
// remove selenium.selectFrame("relative=up");
driver.switchTo().defaultContent(); // you are now outside both frames
driver.switchTo().frame("cq-cf-frame");
// now continue step 6
driver.findElement(By.xpath("//button[text()='OK']")).click(); 

答案 2

您必须使用以下代码退出 Iframe:

driver.switchTo().frame(driver.findElement(By.id("frameId")));
//do your stuff
driver.switchTo().defaultContent();