Selenium webDriver : StaleElementReferenceException

Получаю список нужных веб элементов List<WebElement> temp = driver.findElements(By.cssSelector("span.selection-link")); Далее я хочу достать из списка значения аттрибутов, пока я это делаю вываливается StaleElementReferenceException. Я так понимаю теряется связь с веб-элементами и выбрасывается это исключение. ВОПРОСЫ:

  1. Спарсенные веб-элементы я сохранил в листе, причем тут вообще webDriver? Я спарсил и положил в List, далее работаю с ним, какая связь у List в котором я сохранил то, что спарсил и у webDriver?
  2. Как можно сохранить спарсенные веб элементы и работать с ними после driver.quit?
    В контексте моей задачи этот List в веб-элементами необходимо будет обработать несколько раз (например получить значения аттрибутов и содержимого тега)

Ответы (1 шт):

Автор решения: Edgar Khachatryan

WebElement не сохраняет HTML в памяти это просто ссылка к элементу в DOM. Даже после сохранения элемента все функции выполняются через webDriver. To-есть при вызове функции WebElement#getAttribute создается запрос к драйверу чтобы "оттуда" найти атрибут.

Поэтому вы не можете ничего делать после того как обновили/закрыли/изменили страницу. (Уже сохранившие WebElement-ы просто не существуют)

Если хотите работать с данными после закрытии страницы можете использовать JSOUP

→ Ссылка