Selenium org.openqa.selenium.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 ответ
Ладно, я понял.
Вы должны понимать, что когда вы используете 'findElement', селен сохраняет прямую ссылку на соответствующий элемент DOM. Он не хранит условие "По".
Это означает, что каждый раз, когда вы перезагружаете страницу с помощью 'get (url)', вы теряете все фактические элементы селена, поскольку вся HTML-страница перерисовывается. В таких случаях селен вызывает исключение "устаревший элемент", означающее, что указанный элемент DOM больше не присутствует в DOM.
Чтобы избежать этой ошибки, вам придется заново находить элемент 'rows' на каждой итерации
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);
}