Selenium org.openqa.selenium.StaleElementReferenceException:



我正在尝试用selenium编写这样的应用程序。进入子页面,获取数据,返回,进入下一个子页面...不幸的是,在我看来exception

"org.openqa.selenium.StaleElementReferenceException: Element is no 有效期更长">

好的 - 重新加载后是另一个页面。有什么想法吗?

法典:

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);
}
好的,

我知道了。

你必须明白,当你使用'findElement'时,Selenium会存储对相应DOM元素的直接引用。它不存储"按"条件。

这意味着每次使用"get(url("重新加载页面时,由于整个html页面被重新渲染,您将丢失所有实际的Selenium元素。在这种情况下,硒会引发"过时元素"异常,这意味着引用的 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);
}

相关内容

  • 没有找到相关文章

最新更新