2017-05-04 53 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。