smriti smriti - 5 months ago 11
Java Question

How to handle iframe in WebDriver

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


In this scenario there is an
iframe
under
iframe
. And I have to select the outer
iframe
to go to inner
iframe
and write in the body which is in the inner
iframe
.

Next, I have to come out from the inner
iframe
to outer
iframe
and click on OK button, (which is in the outer
iframe
).

Following is my code

/*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();


Following is my problem:

My test code is working fine up to line number 4 i.e. writing into the body, but I want to come out from inner to outer
iframe
it says that the element
//button[text()='OK']
not found.

I tried with using index, parent, relative, but had no luck.

NOTE: If I don’t select inner frame (cq-gen379). I'm able to click on
OK
button.

Answer

In Webdriver, you should use driver.switchTo().defaultContent(); to get out of a frame. You need to get out of all the frames first, then switch into outer frame again.

// 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(); 
Comments