Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find elements inside forms and iframe using Java and Selenium WebDriver

I'm trying to access elements that are present under <form> <iFrame> <form> elements </form> </iFrame> </form>.

Could you help me on accessing these 'elements', which I'm working with Selenium Webdriver and JAVA?

Issue Encountered: Able to reach the destination page (where the above elements are present), but those elements are not recognized with my code.

Overview of XML structure:

<body>     <form action="https://abcd/efgh/" name="outerForm" method="post" target="iFrameTitle">         <iframe width="700" height="600" src="" title="Frame for Java Test" name="iFrameTitle" scrolling="auto" frameborder="0">             <form id="innerFormID" name="innerForm" action="/xxx/xxxx/yyyy/zzzz/" method="post" autocomplete="off">                 <fieldset id="ncDetailsInner">                     <div id="element1">                         <label for="label1">                         <abbr title="Required field">*</abbr></label>                         <input name="label2" type="text" maxlength="30" id="cardHolder" value="" >                     </div>                      <div id="element2">                         <label for="label3">Label3 <abbr title="Required field">*</abbr></label>                         <div id="element3">                             <label for="label4">Label4<abbr title="Required field">*</abbr></label>                             <input id="label5" name="labelname5" type="text" maxlength="19" value="">                         </div>                          <div id="element4">                             <label for="label6">Label6</label>                             <input id="label7" name="labelname7" type="text" size="2" maxlength="2" value="" class="text disabled" disabled="">                         </div>                     </div>                 </fieldset>             </form>           </iframe>     </form> </body> 

Code Extract:

WebDriverWait wait_iframe = new WebDriverWait(driver, 20000);  wait_iframe.until(ExpectedConditions.visibilityOfElementLocated((By.id("element2"))));  calling_function(sh1.getCell(col + 10, row).getContents(),                  sh1.getCell(col + 11, row).getContents(),                 sh1.getCell(col + 12, row).getContents(),                  sh1.getCell(col + 14, row).getContents());                        public static void called_funciton(String string1, String string2,         String string3, String string4) {         driver.findElement(By.name("Element1 Name")).sendKeys(string1);         driver.findElement(By.id("Element2 ID")).sendKeys(string2);         driver.findElement(By.id("Element3 ID")).sendKeys(string3);         driver.findElement(By.id("Element4 ID")).sendKeys(string4);         driver.findElement(By.name("submitButton")).click();     } 

Do let me know if require any further details!

like image 355
PraveenKS Avatar asked Jun 16 '14 15:06

PraveenKS


People also ask

How do I find an element that contains specific text in Selenium WebDriver?

We can find an element that contains specific text with Selenium webdriver in Python using the xpath. This locator has functions that help to verify a specific text contained within an element. The function text() in xpath is used to locate a webelement depending on the text visible on the page.


Video Answer


2 Answers

Before you try searching for the elements within the iframe you will have to switch Selenium focus to the iframe.

Try this before searching for the elements within the iframe:

driver.switchTo().frame(driver.findElement(By.name("iFrameTitle"))); 
like image 106
SDET Avatar answered Oct 05 '22 23:10

SDET


When using an iframe, you will first have to switch to the iframe, before selecting the elements of that iframe

You can do it using:

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

In case if your frameId is dynamic, and you only have one iframe, you can use something like:

driver.switchTo().frame(driver.findElement(By.tagName("iframe"))); 
like image 20
YouNIC Technolabs Avatar answered Oct 06 '22 00:10

YouNIC Technolabs