Las entrevistas de QA Automation prueban conocimiento de frameworks, patrones de automatización, y — sobre todo — si puedes escribir tests que se mantengan verdes por razones distintas a la suerte. Aquí están las preguntas comunes con respuestas modelo. Junior: teoría básica, definiciones y casos prácticos simples.
1
¿Cuál es la diferencia entre un wait explícito y uno implícito, y qué se rompe cuando los mezclas?
Respuesta
Un wait implícito es una configuración global que hace que cada búsqueda de elemento reintente hasta N segundos. Un wait explícito apunta a una condición en un elemento — clickeable, visible, presente. Mezclarlos es el error clásico: los dos timeouts se acumulan de forma impredecible, y una búsqueda que esperabas que fallara rápido puede colgarse por la suma de ambos. Pon el wait implícito en cero y usa waits explícitos en todos lados.
2
¿Por qué se considera mala práctica Thread.sleep en tests?
Respuesta
Porque codifica una suposición. Duerme tres segundos y o esperaste demasiado en cada corrida, agregando minutos a través de una suite, o no lo suficiente en un día lento, que es exactamente cómo un test se vuelve flaky. Un wait explícito hace polling por la condición y continúa en el momento en que es verdadera, así que es más rápido y más confiable. Sleep solo es defendible cuando genuinamente no hay nada observable que esperar.
3
¿Selector CSS o XPath — cuál eliges y por qué?
Respuesta
CSS es más rápido, más legible y suficiente para la mayoría de los casos. XPath se gana su lugar cuando necesitas viajar hacia arriba a un padre, seleccionar por texto visible, o usar un axis — cosas que CSS no puede expresar. Lo que importa más que la elección es la estabilidad: un selector atado a un data-testid sobrevive un rediseño, y uno copiado de devtools con seis divs anidados no.
4
¿Qué es el Page Object Model y qué problema resuelve?
Respuesta
Pone los locators y acciones de una pantalla en una clase, así el test dice login.submit(admin) en vez de listar búsquedas de elementos. El problema que resuelve es duplicación: cuando un botón cambia, un archivo cambia en vez de cuarenta tests. El modo de fallo es poner aserciones dentro del page object — la página describe la pantalla, el test decide qué es correcto.
5
¿Cuál es la diferencia entre una interfaz y una clase abstracta?
Respuesta
Una clase abstracta puede tener estado y un constructor y describe qué es algo; una clase puede extender solo una. Una interfaz describe qué puede hacer algo y una clase puede implementar muchas. En un framework de tests esto se ve de inmediato: una página base con un campo driver compartido es una clase abstracta, y algo como Searchable que varias páginas soportan es una interfaz.
6
¿Por qué pasan los tests flaky?
Respuesta
Casi siempre timing o estado compartido. Timing significa afirmar antes de que la aplicación terminara — una animación, un request async, un re-render. Estado compartido significa un test dejando datos de los que otro depende, que aparece en el momento en que los corres en un orden distinto o en paralelo. La tercera causa y menos discutida es el entorno: una máquina de CI lenta convierte una race que nunca notaste localmente en un fallo diario.
7
¿Qué es un StaleElementReferenceException y cómo lo evitas?
Respuesta
Significa que mantuviste una referencia a un elemento que la página desde entonces re-renderizó — el objeto apunta a un nodo que ya no está en el DOM. Aparece más a menudo después de una actualización que redibuja una lista o una tabla. Lo evitas buscando el elemento de nuevo en vez de guardarlo, que es exactamente lo que hacen los locators de Playwright por diseño y lo que un campo PageFactory de Selenium no hace.