web-dev-qa-db-fra.com

Trouvez des éléments à l'intérieur de formulaires et d'iframe avec Java et Selenium WebDriver

J'essaie d'accéder aux éléments présents sous <form> <iFrame> <form> elements </form> </iFrame> </form>.

Pourriez-vous m'aider à accéder à ces "éléments" , sur lesquels je travaille avec Selenium Webdriver et JAVA?

Problème rencontré: Capable d'atteindre la page de destination (où les éléments ci-dessus sont présents), mais ces éléments ne sont pas reconnus avec mon code.

Aperçu de la structure XML:

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

extrait de code:

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

Faites-moi savoir si besoin de plus de détails!

47
PraveenKS

Avant de rechercher des éléments dans l'iframe, vous devez activer le focus de Selenium sur l'iframe.

Essayez ceci avant de rechercher les éléments dans l’iframe:

driver.switchTo().frame(driver.findElement(By.name("iFrameTitle")));
71
SDET

Si vous utilisez un iframe, vous devez d’abord passer à l’iframe avant de sélectionner les éléments de cette iframe.

Vous pouvez le faire en utilisant:

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

Si votre frameId est dynamique et que vous n'avez qu'un iframe, vous pouvez utiliser quelque chose comme:

driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
43
YouNIC Technolabs

Sur Selenium> = 3.41 (C #), la syntaxe exacte est la suivante: webDriver = webDriver.SwitchTo().Frame(webDriver.FindElement(By.Name("icontent")));

0
Quentin Martinez