Selenium org.openqa.selenium.StaleElementReferenceException:元素不再有效

时间:2018-01-23 10:13:26

标签: java selenium selenium-webdriver webdriver staleelementreferenceexception

我正在尝试在selenium中编写此类应用程序。进入子页面,获取数据,返回,进入下一个子页面... 不幸的是,exception似乎在我身上

  

“org.openqa.selenium.StaleElementReferenceException:元素为否   更长的有效“

好吧 - 重新加载之后是另一页。有什么想法吗?

代码:

List<WebElement> rows = driver.findElements(By.className("detail-card__heading"));
List<WebElement> cols=new ArrayList<WebElement>();
for(int i=0;i<rows.size();i++){
System.out.println("Nr oferty: "+i);
cols=rows.get(i).findElements(By.tagName("div"));
for(WebElement col:cols) {
System.out.print("cell value "+col.getText());
 col.click();
}
 driver.get(CurrentUrl);
}

1 个答案:

答案 0 :(得分:0)

好的,我明白了。

您必须明白,当您使用&#39; findElement&#39;时,selenium会存储对相应DOM元素的直接引用。它没有存储&#39; By&#39;条件。

这意味着每次使用&#39; get(url)&#39;重新加载页面时,您将丢失所有实际的selenium元素,因为整个html页面都会被重新呈现。在这种情况下,硒会产生一种陈旧的元素。异常意味着DOM中不再存在引用的DOM元素。

为避免此错误,您必须重新找到您的“排”行。每次迭代时的元素

List<WebElement> rows = driver.findElements(By.className("detail-card__heading"));
List<WebElement> cols=new ArrayList<WebElement>();
for(int i=0;i<rows.size();i++){
    System.out.println("Nr oferty: "+i);
    rows = driver.findElements(By.className("detail-card__heading"));
    cols=rows.get(i).findElements(By.tagName("div"));
    for(WebElement col:cols) {
        System.out.print("cell value "+col.getText());
        col.click();
    }
    driver.get(CurrentUrl);
}