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