Back

Explore Courses Blog Tutorials Interview Questions
0 votes
1 view
in DevOps and Agile by (19.7k points)

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

Could you help me with 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!

1 Answer

0 votes
by (62.9k points)

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")));

Hope this helps!

If you are interested to learn Selenium on a much deeper level and want to become a professional in the testing domain, check out Intellipaat’s Selenium automation online training!

 

Related questions

Welcome to Intellipaat Community. Get your technical queries answered by top developers!

28.4k questions

29.7k answers

500 comments

94.2k users

Browse Categories

...