Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to handle iframe in Selenium WebDriver using java

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

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 the inner frame (cq-gen379). I'm able to click on the OK button.

like image 880
smriti Avatar asked Mar 30 '12 12:03

smriti


People also ask

How do I click iframe in Selenium?

Right click on the element, If you find the option like 'This Frame' then it is an iframe. (Please refer the above diagram) Right click on the page and click 'View Page Source' and Search with the 'iframe', if you can find any tag name with the 'iframe' then it is meaning to say the page consisting an iframe.

Can we test iframes using Selenium?

For a browser to automatically start interacting with the web page, it is essential for the browser to identify the elements under the frame for Selenium testing. It is possible to identify the iframes on a web page in two ways: Right-click on the specific element and check all the options.


2 Answers

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();  
like image 103
Yi Zeng Avatar answered Sep 19 '22 04:09

Yi Zeng


You have to get back out of the Iframe with the following code:

driver.switchTo().frame(driver.findElement(By.id("frameId"))); //do your stuff driver.switchTo().defaultContent(); 
like image 24
Tarken Avatar answered Sep 22 '22 04:09

Tarken