2012-08-31 70 views
0

我用我的UI自動化PageObject/PageFactory設計模式的DOM錯誤。使用硒webdriver的2.0,JAVA,我隨機得到的錯誤:org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM,當我嘗試的邏輯是這樣的:硒2.0的webdriver:元素不再連接到使用Java

@FindBy(how = HOW.ID, using = "item") 
private List<WebElement> items 

private void getItemThroughName(String name) { 
    wait(items); 

    for(int i = 0; i < items.size(); i++) { 
     try { 
      Thread.sleep(0500); 
     } catch (InterruptedException e) { } 

     this.wait(items); 
     if(items.get(i).getText().contains(name)) { 
      System.out.println("Found"); 
      break; 
     } 
    } 
} 

錯誤隨機發生在如果語句行,你可以看到我已經試過幾件事情要避免這種情況,再如睡覺的少量時間,或等待的元素,無論是工作時間的100%

+0

你有任何的JavaScript您的網頁上可能會刪除從頁面項目? –

+0

您是否嘗試過在Selenium中使用實際的顯式等待方法?這個錯誤通常是一個競爭條件問題。 – Arran

+0

就像Arran說的:嘗試使用webdriver的等待。使用Thread.sleep()是不好的做法,應該避免。您可能永遠不知道500毫秒間隔是否足夠,從而出現隨機錯誤。嘗試隱式/顯式等待,或者甚至通過使用FluentWait類進一步 – Arek

回答

1

首先,如果你真的有多個元素上的「item」ID應該記錄一個錯誤或與網站上的開發人員進行交談以解決該問題。 ID是唯一的。

關於這一問題的評論已經暗示,你應該在這種情況下使用ExplicitWait:

private void getItemThroughName(String name) { 
    new WebDriverWait(driver, 30) 
       .until(ExpectedConditions.presenceOfElementLocated(
       By.xpath("id('item')[.='" + name + "']") 
       )); 
    // A timeout exception will be thrown otherwise 
    System.out.println("Found"); 
}