es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python playwright: esperar por un estado DOM arbitrario.

He estado trabajando con Playwright en Python (v1.16) y pensé en migrar algunas de nuestras pruebas de Cypress como experimento. Sin embargo, me he encontrado con varios inconvenientes relacionados con el mismo problema: necesito esperar por algún estado arbitrario del DOM y no sé cómo.

Sé que Playwright puede esperar por algunos estados de elementos como visibles o desvinculados, pero quiero algo que espere también por otros estados del DOM, como la presencia de texto, que los atributos de un elemento tengan un valor determinado o que se produzca un cambio en la estructura HTML de un elemento, etc.

Por ejemplo, en una prueba tengo un indicador de progreso que se actualiza un segundo después de que se complete un formulario. Quiero afirmar que el porcentaje de progreso llega a un valor esperado, pero para hacerlo necesito esperar a que el texto del elemento de progreso cambie en consecuencia. No veo cómo hacer esto sin escribir mi propio esquema de sondeo.

En otro caso, tengo un botón de envío que se construyó de una manera “realmente genial” y utiliza una clase CSS .disabled para indicar al usuario que no puede enviar el formulario (el botón también tiene sus controladores de clic aplicados/eliminados dinámicamente para hacer cumplir el estado deshabilitado). Playwright no sabe nada al respecto y piensa que el botón está listo para ser presionado inmediatamente después de llamar a click() porque todas las comprobaciones de acción pasan de inmediato. Necesito esperar a que se elimine la clase deshabilitada del botón antes de llamar a click(). ¿Cómo puedo hacer esto?

Sé que puedo crear nuevos selectores para elementos que incluyan las partes del DOM que quiero esperar (por ejemplo, agregar una condición text=5% a mi selector de indicador de progreso), pero no me gusta esto porque si falla, obtengo un error genérico “no pudimos encontrar el selector” en lugar de algo más parecido a una afirmación como “falló esperando a que el texto del elemento contenga 5%”. También uso objetos de página para almacenar mis selectores y realmente sería terrible si tuviera que hacer un nuevo selector para cada afirmación en cada elemento.

¿Existe una manera idiomática de esperar por estados arbitrarios del DOM que no implique duplicar/modificar selectores?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás buscando una forma de esperar por estados arbitrarios del DOM en Playwright sin duplicar ni modificar selectores. Desafortunadamente, no hay una forma idiomática de hacer esto. Es posible que necesites escribir tu propio esquema de sondeo para esperar los estados del DOM que necesitas. Alternativamente, podrías crear nuevos selectores para elementos que incluyan los fragmentos del DOM que quieres esperar, pero esto podría llevar a errores genéricos en lugar de errores más parecidos a afirmaciones.

Comments are closed.