Подтвердить что ты не робот

Найти элементы внутри форм и iframe с помощью Java и Selenium WebDriver

Я пытаюсь получить доступ к элементам, которые присутствуют в <form> <iFrame> <form> elements </form> </iFrame> </form>.

Не могли бы вы помочь мне в доступе к этим "элементам", с которыми я работаю с Selenium Webdriver и JAVA?

Обнаружена проблема: Возможность доступа к целевой странице (где присутствуют вышеуказанные элементы), но эти элементы не распознаются с моим кодом.

Обзор структуры 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>

Извлечение кода:

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

Дайте мне знать, если вам нужна дополнительная информация!

4b9b3361

Ответ 1

Прежде чем пытаться выполнить поиск элементов в iframe, вам нужно переключить Selenium focus на iframe.

Попробуйте это, прежде чем искать элементы в iframe:

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

Ответ 2

При использовании iframe вам сначала нужно переключиться на iframe, прежде чем выбирать элементы этого iframe

Вы можете сделать это, используя:

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

Если ваш frameId является динамическим, и у вас есть только один iframe, вы можете использовать что-то вроде:

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

Ответ 3

В моем случае я использую CSS Selector для переключения

driver.SwitchTo().Frame(driver.FindElement(By.CssSelector("iframe[class='frameclass']")));