如何在WebDriver中处理iframe

<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> 

在这种情况下iframe下有一个iframe 。 我必须select外部iframe去内部iframe并写入内部iframe中的主体。

接下来,我必须从内部iframe走出到外部iframe ,然后单击OKbutton(位于外部iframe )。

以下是我的代码

 /*Line 1 */ driver.switchTo().frame("cq-cf-frame"); /* 2 */ driver.findElement(By.css("#extdd-9 > div.tblRow > input.edititem").click(); /* 3 */ driver.switchT().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(); 

以下是我的问题:

我的testing代码工作正常,行号4即写入到身体,但我想从内部到外部iframe出来说它的元素/ / //button[text()='OK']没有find。

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

注意:如果我不select内部框架(cq-gen379)。 我可以点击OKbutton。

在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(); 

您必须使用以下代码从Iframe中取出:

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

希望有所帮助

你需要先findiframe 。 你可以用下面的语句来做。

 WebElement iFrame= driver.findElement(By.tagName("iframe")); 

然后,你可以用你的WebDriver对象上的switchTo方法开关它。

 driver.switchTo().frame(iFrame); 

为了回到父框架,你可以使用switchTo().parentFrame()或者如果你想返回到主框架,你可以使用switchTo().defaultContent();

 driver.switchTo().parentFrame(); // to move back to parent frame driver.switchTo().defaultContent(); // to move back to most parent or main frame 

希望它有帮助。

 WebDriver driver=new FirefoxDriver(); driver.get("http://www.java-examples.com/java-string-examples"); Thread.sleep(3000); //Switch to nested frame driver.switchTo().frame("aswift_2").switchTo().frame("google_ads_frame3"); 

要回到父框架,请使用:

 driver.switchTo().parentFrame(); 

要回到第一个/主框架,请使用:

 driver.switchTo().defaultContent(); 

框架处理的下面的方法:当没有id或名字给予嵌套的框架

 WebElement element =driver.findElement(By.xpath(".//*[@id='block-block19']//iframe")); driver.switchTo().frame(element); driver.findElement(By.xpath(".//[@id='carousel']/li/div/div[3]/a")).click(); 

seleniumWeb驱动程序框架处理

driver.switchTo(). defaultContent (); [parentFrame, defaultContent, frame] (); [parentFrame, defaultContent, frame]

框架:

 // Based on index position: int frameIndex = 0; List<WebElement> listFrames = driver.findElements(By.tagName("iframe")); System.out.println("list frames "+listFrames.size()); driver.switchTo().frame(listFrames.get( frameIndex )); // XPath|CssPath Element: WebElement frameCSSPath = driver.findElement(By.cssSelector("iframe[title='Fill Quote']")); WebElement frameXPath = driver.findElement(By.xpath(".//iframe[1]")); WebElement frameTag = driver.findElement(By.tagName("iframe")); driver.switchTo().frame( frameCSSPath ); // frameXPath, frameTag driver.switchTo().frame("relative=up"); // focus to parent frame. driver.switchTo().defaultContent(); // move to the most parent or main frame // For alert's Alert alert = driver.switchTo().alert(); // Switch to alert pop-up alert.accept(); alert.dismiss(); 

XMLtesting:

 <html> <IFame id='1'>... parentFrame() « context remains unchanged. <IFame1> | -> <IFrame id='2'>... parentFrame() « Change focus to the parent context. <IFame1> <Fame id='11'>... defaultContent() « driver focus to top window/first frame. <html> | -> <Frame id='22'>... defaultContent() « driver focus to top window/first frame. <Fame11> frame("relative=up") « focus to parent frame. <Fame11> ... 

将RC转换为Web驱动程序Java命令。 链接 。