使用Java和Selenium WebDriver在表单和iframe中查找元素

我试图访问<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(); } 

请让我知道,如果需要任何进一步的细节!

在尝试searchiframe中的元素之前,您必须将Selenium焦点切换到iframe。

在searchiframe中的元素之前试试这个:

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

使用iframe时,首先必须切换到iframe,然后select该iframe的元素

你可以这样做:

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

如果你的frameId是dynamic的,而你只有一个iframe,你可以使用如下的东西:

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