2017-05-04 50 views
-1

下面是一個代碼片段:硒Java的瀏覽器:陳舊的例外

System.setProperty(Constants.WEBDRIVER_CHROME_DRIVER_PROP, Constants.WEBDRIVER_CHROME_DRIVER_PATH); 

    m_chromeWebdriver = new ChromeDriver(); 
    m_chromeWebdriver.get("mysite.org"); 

    WebElement arrowElement = m_chromeWebdriver.findElement(By.cssSelector(_ARROW_NEXT_DAY)); 
    arrowElement.click(); 

    WebElement elmMainTable = m_chromeWebdriver.findElement(By.className("table-main")); 

    List<WebElement> allRows = elmMainTable.findElements(By.tagName("tr")); 

    for (WebElement row : allRows) { 

     List<WebElement> cells = row.findElements(By.tagName("td")); 
     for (WebElement cell : cells) { 
      System.out.println(cell.getText()); 
     } 
    } 
    m_chromeWebdriver.quit(); 

在最後一行我得到一個

「陳舊元素參考:元素沒有被附加到頁面 文件」

異常。

爲什麼以及如何解決? 我使用Chromdriver 2.2.9。

感謝

+1

您正在通過循環迭代列表元素。對 ? – NarendraR

+0

'elmNextDayArrow.click();'這行代表什麼? – kushal

+0

@NarendraRajput我想... – dushkin

回答

0

嗯,這可能不是完美的解決方案 - 至少它爲我工作...

我把所有的相關代碼到這樣的方法:

private static void handleTable() { 

    for (int i = 1; i < 5; i++) { 

    try { 
     WebElement elmMainTable = m_chromeWebdriver.findElement(By.className("table-main")); 

     List<WebElement> allRows = elmMainTable.findElements(By.cssSelector(".table-main tr")); 

     for (WebElement row : allRows) { 

      List<WebElement> cells = row.findElements(By.tagName("td")); 

      for (WebElement cell : cells) { 

       System.out.print(cell.getText() + "\t"); 
      } 
      System.out.println(); 
     } 

    } catch (StaleElementReferenceException e) { 

     //e.printStackTrace(); 

     handleTable(); 
    } 

    return; 
} 

}

它的工作!當然你可以改變你想要的值5。