Selenium webDriver : StaleElementReferenceException
Получаю список нужных веб элементов List<WebElement> temp = driver.findElements(By.cssSelector("span.selection-link"));
Далее я хочу достать из списка значения аттрибутов, пока я это делаю вываливается StaleElementReferenceException. Я так понимаю теряется связь с веб-элементами и выбрасывается это исключение. ВОПРОСЫ:
- Спарсенные веб-элементы я сохранил в листе, причем тут вообще webDriver? Я спарсил и положил в List, далее работаю с ним, какая связь у List в котором я сохранил то, что спарсил и у webDriver?
- Как можно сохранить спарсенные веб элементы и работать с ними после
driver.quit?
В контексте моей задачи этот List в веб-элементами необходимо будет обработать несколько раз (например получить значения аттрибутов и содержимого тега)
Ответы (1 шт):
WebElement не сохраняет HTML в памяти это просто ссылка к элементу в DOM.
Даже после сохранения элемента все функции выполняются через webDriver.
To-есть при вызове функции WebElement#getAttribute создается запрос к драйверу
чтобы "оттуда" найти атрибут.
Поэтому вы не можете ничего делать после того как обновили/закрыли/изменили страницу. (Уже сохранившие WebElement-ы просто не существуют)
Если хотите работать с данными после закрытии страницы можете использовать JSOUP