2016-03-08 60 views
1

我已經有一段研究這個錯誤,並嘗試很多事情,似乎沒有任何工作...硒:StaleElementReferenceException

 while(!driver.findElements(By.className("next")).isEmpty()) { 
      //elements = driver.findElements(By.xpath("//a[@class='name']")); 
      elements = findDynamicElements("//a[@class='name']"); 
      for (WebElement e : elements) { 
       userName = e.getText(); //<--EXCEPTION HERE 
       check_visitor_profile(userName);//<--WE LEAVE THE PAGE HERE 
       Thread.sleep(3000); //<--NO TRY/CATCH BLOCK FOR READABILITY 
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
       elements = findDynamicElements("//a[@class='name']"); 

      } 
      driver.findElement(By.xpath("VisitsNext")).click(); 
     }  



protected List<WebElement> findDynamicElements(String path) { 
     List<WebElement> result; 
     String xPath = path; 
     new WebDriverWait(driver, 25).until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(xPath))); 
     //new WebDriverWait(driver, 25).until(elementIdentified(By.id(path))); 

     try { 
      result = driver.findElements(By.xpath(xPath)); 
      return result; 
     } 
     catch(WebDriverException e) { 
      return null; 
     } 
    ); 
    } 

我的代碼胡扯出來的for循環其中username第一線被安排了。我在這個論壇上看到你應該使用'presenceOfElementLocated'並明確地等待元素回來,但這也不起作用。我使用'presenceOfAllElementsLocatedBy'作爲列表,但是我有一個使用'presenceOfElementLocated'的方法,它也不起作用。

我知道像Thread.sleep代碼和implicitlyWait行的東西是在這一點上可能沒有必要,但我已經從字面上都試過了,它不工作...發生

的錯誤,因爲當我打電話「 check_visitor_profile'它會離開頁面 - 當它返回時,元素不在原位,所以我必須再次找到它們。我做了,但仍然拋出異常。

任何想法?

謝謝。

回答

1

該問題可能會發生,因爲您正在更改elements在循環中。即使沒有StaleElementReferenceException,它也會造成麻煩。使用替代for each

elements = findDynamicElements("//a[@class='name']"); 
int size = elements.size(); 
for (int i = 0 ; i < size ; ++i) { 
    elements = findDynamicElements("//a[@class='name']"); 
    userName = elements.get(i).getText(); 
    check_visitor_profile(userName); 
} 
+0

這就是我一直在尋找的答案 - 謝謝。 – MatTaNg

0

處理異常明確作爲元素不再附加到DOM或在那一刻發生了變化,你所說的「check_visitor_profile」

請參見下面的威力影響到鏈接for循環幫助

  catch(StateElementException e){ 
      System.out.println("StaleElement dealt with since you successfully left page "); 
       } 

http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp

相關問題