2013-04-16 60 views
0

我想使用Selenium在使用ajax和/或jquery加載的頁面上查找webElement。問題等待使用Java中的硒加載元素

看來不管我做什麼,都找不到這個元素。

我使用Firefox 20和Selenium 2.31.0。

那,我試圖讓部分有HTML,看起來像這樣(我得到這個使用檢查工具在Firefox):

<form id="file_upload" method="post" enctype="multipart/form-data" action="myAction.php"> 
    <table class="table table-striped"> 
     <tbody> 
     <tr> 
      <td> 
      <input class="input-file" type="file" name="file"></input> 
      <input class="btn btn-primary" type="submit" value="upload"></input> 
      </td> 
      <td style="text-align:right;"></td> 
     </tr> 
     </tbody> 
    </table> 
    </form> 

我曾嘗試:

WebDriverWait driverWait = new WebDriverWait(driver, 10000); 

WebElement dynamicElement = driverWait.until(ExpectedConditions.presenceOfElementLocated(By.id("file_upload"))); 

System.out.println(dynamicElement.getText()); 

和我已嘗試過:

WebElement dynamicElement = new FluentWait<WebDriver>(driver).withTimeout(1, TimeUnit.MINUTES).pollingEvery(1, TimeUnit.SECONDS) 
    .ignoring(NoSuchElementException.class).until(ExpectedConditions.visibilityOfElementLocated(By.id("file_upload"))); 

System.out.println(dynamicElement.getText()); 

但是我嘗試的任何東西從來沒有發現它,或者超時,無論我給它多少時間找到那個元素。任何幫助將非常感激。謝謝。

+0

你的網頁有沒有框架? – Hemanth

+0

其實有 - 我只是注意到,我試圖獲得的元素包含在iframe中 - 這可能是我爲什麼有問題嗎? – user1296259

+1

使用'driver.switchto().frame(frame id或index number);'在你嘗試使用'findElement'之前 – Hemanth

回答

1
// to make sure you are in the default content 
// this is not necessary in the most of the cases 
driver.switchTo().defaultContent(); // use only if you are in a frame already 

driver.switchto().frame("framename or id"); 
//driver.switchto().frame(driver.findElement(By.xpath("frame locator"))); 
//driver.switchto().frame(zero-based frameindex); 

// now in the frame 
WebDriverWait driverWait = new WebDriverWait(driver, 10000); 
WebElement dynamicElement = driverWait.until(ExpectedConditions.presenceOfElementLocated(By.id("file_upload"))); 
System.out.println(dynamicElement.getText()); 

// if you want to get out of all frames back to default content 
driver.switchTo().defaultContent();