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);
}
Другие вопросы по тегам