2011-07-05 43 views
6

我們希望將我們的測試移至硒2,並且發現了一個我不知道如何解決它的問題。在使用Java的Internet Explorer上運行的WebDriver中發現「沒有元素」異常

我使用下面的命令進行的webdriver:

WebDriver driver = new InternetExplorerDriver(); 
driver.navigate().to("webapp"); 
Thread.sleep(3000); 
System.out.println(driver.getPageSource()); 
WebElement element = driver.findElement(By.id("someid")); 

在最後一行引發異常,並沒有元素被發現。 同樣的例子在Firefox中運行良好,但我們需要它在IE中擁有它。 我試圖添加更多的睡眠,但它沒有幫助。 getPageSource方法返回正確的html。

我也嘗試使用以下命令獲取body標籤,但它返回null。

List<WebElement> list = driver.findElements(By.tagName("body")); 

我們的web應用程序是以gwt創建的。

你知道什麼可能導致硒沒有看到任何元素?

回答

0

也許你可以嘗試搜索元素之前添加

driver.switchTo().window(driver.getWindowHandle()); 

。當Webdriver在不同服務器上的頁面之間移動時(不是使用IE而是使用Firefox),我遇到了這個問題。

+2

它不幸地沒有工作。 –

1

您發佈的代碼絕對沒有問題。

請確保您使用了一些較新的Selenium版本,而不是某些舊的Alpha/Beta版本。你使用哪個IE,它有沒有特殊的附加組件?它是否適用於這樣的最小網頁?

<html> 
<input id='myId' /> 
</html> 

您是否嘗試過搜索其他元素?通過一些其他技術,如XPath或CSS選擇器?你的資本化是絕對正確的嗎?如果保存頁面的html並嘗試使用所述測試用例在本地加載,它是否工作?你能提供一個最小的測試用例嗎?作爲一個不太可能對工作不得已的解決方案,你可以嘗試回退到硒1兩行代碼,以幫助在某些罕見的情況下等待:

Selenium sele = new WebDriverBackedSelenium(driver, "webapp"); 
sele.waitForPageToLoad("10000"); 
+0

我會添加,以確保在生成的HTML代碼中存在id ='someid'的一些元素 – Zecas

1

試着做之前使用智能等待這樣你的任務陳述。你只需要傳入你當前的WebDriver對象和一個超時值。

new WebDriverWait(driver, timeOutInSeconds).until(new ExpectedCondition<Boolean>() { 
     @Override 
     public Boolean apply(final WebDriver theDriver) { 
      return Boolean.valueOf(theDriver.findElements(By.id(elementId)).size() > 0); 
     } 
    }); 
+0

我的問題是這個解決方案是findElements方法拋出一個NullPointerException,它不會解決問題。 – NestorDRod

相關問題