¿Qué significa StaleElementReferenceException?
Opciones
- El elemento se volvió a renderizar; búscalo otra vez (Opción correcta)
- El navegador está desactualizado y necesita actualizarse
- Falta el ejecutable del driver en el sistema
- El elemento está oculto detrás de otro elemento
Respuesta
El elemento que encontraste antes se eliminó o se volvió a renderizar en el DOM, así que la referencia guardada ya no es válida; búscalo otra vez (y espera bien)
Por qué
Selenium mantiene una referencia a un elemento del DOM. Si la página se vuelve a renderizar (actualización de React, refresco AJAX, navegación), el elemento antiguo se reemplaza por uno nuevo aunque parezca idéntico, y la referencia antigua queda obsoleta.
Solución: vuelve a localizar el elemento justo antes de usarlo, no guardes objetos WebElement mucho tiempo y espera a que la página se estabilice (explicit waits). Los page objects que buscan los elementos en cada acción evitan esto.
Recuerda
Stale = el elemento del DOM se reemplazó; localízalo otra vez.