Ответ вслух Middle Selenium и WebDriver обновлено

Борьба со stale-элементами

Вопрос

Расскажите, почему возникает StaleElementReferenceException и как вы строите тесты, чтобы его не было.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «WebElement это ссылка на конкретный узел DOM. Когда фреймворк перерисовывает список после сортировки или фильтра, узел удаляется, а ссылка протухает.

Что должно прозвучать в ответе

  • Ссылка на элемент привязана к узлу DOM, перерисовка её протухает

  • Типичные моменты: сортировка, фильтр, обновление списка, переход SPA

  • Не хранить WebElement долго, искать заново перед действием

  • Page Object отдаёт локаторы или ищет элемент лениво

  • Ждать завершения перерисовки (staleness_of старого элемента), а не ловить исключение циклом

Что могут спросить следом

  • Помогает ли ретрай клика при stale?
  • Как это решено в Selenide и Playwright?

Разбор

Образцовый ответ: «WebElement это ссылка на конкретный узел DOM. Когда фреймворк перерисовывает список после сортировки или фильтра, узел удаляется, а ссылка протухает. Поэтому я не храню элементы между действиями: Page Object хранит локаторы и ищет элемент при каждом обращении. Если действие вызывает перерисовку, жду её явно: staleness_of для старого элемента или появления нового состояния. Ретрай клика по stale работает, но маскирует проблему. В Selenide и Playwright локаторы ленивые, поэтому там этой ошибки практически нет»).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме