我正在尝试用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);
}