Entendiendo los selectores de Playwright Una guía

Guía para entender los selectores de Playwright

Imagen de 200 Degrees de Pixabay

Playwright es una biblioteca de automatización potente y versátil para pruebas web, que permite a los desarrolladores controlar los navegadores web de forma programática y realizar pruebas de extremo a extremo confiables. En el corazón de la funcionalidad de Playwright se encuentra un componente crucial: los selectores. Los selectores son el puente entre tus pruebas y tu página web. Te permiten encontrar e interactuar con elementos en la página web.

Esta guía profundiza en los selectores en Playwright, mostrando su importancia, tipos y mejores prácticas.

¿Qué son los selectores en Playwright?

Los selectores en Playwright son cadenas de texto que identifican elementos particulares en una página web. Se utilizan para apuntar a estos elementos para interacciones como hacer clic, escribir o leer texto. Los selectores hacen que tus pruebas sean más legibles y resistentes a los cambios, y ayudan a mantener el enfoque en el comportamiento que estás tratando de probar.

Tipos de selectores en Playwright

Hay varios tipos de selectores disponibles en Playwright. Estos incluyen selectores CSS, selectores XPath, selectores de texto y selectores de atributos. Veamos cada uno.

Selectores CSS

Los selectores CSS se basan en el lenguaje CSS utilizado para diseñar páginas web. Nos permiten identificar elementos en una página web utilizando propiedades CSS. Los selectores CSS pueden apuntar a elementos por su tipo (como div, button, a), clase (.nombreclase), ID (#nombreid), atributo ([atributo=valor]) o una combinación de ellos.

Por ejemplo, en Playwright, podrías apuntar a un botón con el ID submit utilizando page.click( '#submit' ). Si tienes una clase o atributo único, puedes seleccionarlos de manera similar. Los selectores CSS también permiten consultas más complejas, como seleccionar el primer hijo de un nodo (:primer-hijo), seleccionar elementos con relaciones de hermanos específicas (+, ~), o seleccionar elementos que se encuentren en un estado específico (:hover, :focus).

Selectores XPath

Los selectores XPath ofrecen una forma diferente de navegar por elementos y atributos en un documento HTML. Son particularmente poderosos cuando necesitas apuntar a elementos basados en su posición jerárquica en el documento HTML o en el texto específico que contienen.

Por ejemplo, page.click('//button[normalize-space(.)="Registrarse"]') apunta a un botón con el texto exacto “Registrarse”. La expresión / / le indica a XPath que busque en todo el documento HTML. El button le indica a XPath que solo busque elementos de tipo botón. La parte normalize-space(.)="Registrarse" es una función que recorta los espacios en blanco al principio y al final de la cadena y reemplaza las secuencias de caracteres de espacio en blanco por un solo espacio. Esto puede ser muy útil cuando se trata de un formato impredecible.

Selectores de texto

Los selectores de texto te permiten apuntar a elementos basados en el texto que se muestra. Esto puede ser extremadamente útil para pruebas desde la perspectiva del usuario, ya que los usuarios a menudo interactúan con las páginas web en función del texto que ven.

Por ejemplo, con el comando page.click('text="Registrarse"'), Playwright buscaría un elemento que muestre el texto “Registrarse” y haría clic en él. Esto funciona para botones, enlaces, divs, spans y otros elementos que pueden contener texto visible.

Selectores de atributos

Los selectores de atributos apuntan a elementos basados en sus atributos HTML. Esto puede ser útil cuando un elemento no tiene una clase o ID único o cuando su posición en el documento HTML no está fija.

Por ejemplo, el comando page.click('[disabled]') apunta a un elemento con el atributo disabled, independientemente de su tipo, clase o ID. También puedes apuntar a valores específicos de atributos, por ejemplo, page.click('[value="Enviar"]') haría clic en un elemento con un atributo value de Enviar.

Trabajando con Selectores Compuestos

Cuando se trata de páginas web complejas, los desarrolladores a menudo se encuentran con situaciones en las que los elementos no pueden ser seleccionados de manera confiable por un solo tipo de selector. Aquí es donde entran en juego los selectores compuestos. Te permiten encadenar diferentes tipos de selectores, creando así un proceso de selección de elementos más preciso y robusto.

Los selectores compuestos en Playwright son una combinación de diferentes tipos de selectores que se unen utilizando el operador >>. Este operador indica que el elemento que se está seleccionando debe coincidir con todos los selectores combinados en la secuencia.

Desglosemos este ejemplo dado: page.click('css=.container >> text=Submit'). En este comando:

  • css=.container utiliza un selector CSS para seleccionar un elemento con la clase container. Los selectores CSS se utilizan a menudo debido a su presencia ubicua en el desarrollo web, su precisión y su legibilidad.
  • >> es el operador que combina los selectores. Crea una relación entre los selectores, indicando que el elemento text=Submit debe ser un hijo (directo o indirecto) del elemento .container.
  • text=Submit utiliza un selector de texto para seleccionar un elemento que muestra el texto visible “Submit”. Este es un ejemplo de selección de elementos desde la perspectiva del usuario, ya que los usuarios a menudo interactúan con elementos basados en el texto visible.

En un escenario práctico, supongamos que tienes varios botones “Submit” en una página web, cada uno dentro de un .container diferente. El selector compuesto proporciona una forma de interactuar con el botón “Submit” específico dentro del .container deseado.

Aunque son poderosos, los selectores compuestos también requieren consideración cuidadosa. Su precisión depende de la estructura de la página web; cualquier cambio en la estructura puede requerir actualizaciones en los selectores compuestos. Como tal, aunque proporcionan una selección de elementos más precisa, pueden aumentar potencialmente el mantenimiento si la estructura de la página web está sujeta a cambios frecuentes.

Selectores Personalizados en Playwright

Playwright es increíblemente flexible, proporcionando varios selectores integrados para adaptarse a los casos de uso más comunes. Sin embargo, siempre habrá escenarios únicos o complejos que requieran un enfoque más personalizado. Para estos casos, Playwright ofrece la capacidad de diseñar selectores personalizados, lo que brinda a los desarrolladores la libertad de adaptar las estrategias de selección de elementos a sus necesidades específicas.

Los selectores personalizados pueden ser especialmente beneficiosos al trabajar con componentes web personalizados o estructuras DOM no convencionales. Por ejemplo, supongamos que estás interactuando con una página web que utiliza un componente web personalizado que tiene propiedades únicas para el componente. Podrías crear un selector personalizado que seleccione específicamente elementos basados en estas propiedades específicas del componente.

Aquí hay un ejemplo conceptual para ilustrar esto.

Imagina que tienes un componente web personalizado <my-component> con una propiedad única data-state:

<my-component data-state="active">…</my-component>

Para seleccionar este estado activo, podrías crear un selector personalizado en Playwright que comprenda este atributo data-state:

 <span class="pre--content">playwright.<span class="hljs-property">selectors</span>.<span class="hljs-title function_">register</span>(<span class="hljs-string">'mySelector'</span>, {  <span class="hljs-comment">// El método create se utiliza para crear el selector personalizado.</span>  <span class="hljs-title function_">create</span>(<span class="hljs-params">root, target</span>) {    <span class="hljs-keyword">return</span> root.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">`[data-state=<span class="hljs-subst">${target}</span>]`</span>);  },});</span>

Luego puedes usar este selector personalizado en tus comandos de Playwright:

await page.click('mySelector=active');

Este comando haría clic en <my-component> solo cuando data-state esté “activo”.

Esta habilidad para crear selectores personalizados amplifica la versatilidad de Playwright, permitiéndole adaptarse a peculiaridades específicas de la aplicación y proporcionando a los desarrolladores un control preciso sobre cómo se seleccionan e interactúan con los elementos en sus pruebas.

Mejores prácticas para usar selectores en Playwright

Seleccionar los elementos correctos es clave para una automatización exitosa en Playwright. Aquí hay algunas ideas clave basadas en mi experiencia:

1. Optar por la especificidad en lugar de la flexibilidad: Apunta a selectores lo suficientemente específicos para identificar los objetivos pero lo suficientemente flexibles para tolerar cambios menores en la página web. Los selectores demasiado precisos a menudo se rompen con pequeños ajustes en la interfaz de usuario.

2. Usar atributos significativos: id, name o data-testid suelen ser únicos y consistentes, siendo la elección preferida para los selectores. Esto ayuda a crear scripts de prueba resistentes.

3. Priorizar la legibilidad: Tu código no es solo para ti; es para tu equipo y para tu yo futuro. Mantén los selectores intuitivos y claros, complementándolos con comentarios cuando sea necesario.

4. Usar selectores compuestos y personalizados de manera inteligente: Estas son herramientas poderosas para crear selectores precisos y contextualmente conscientes. Úsalas con prudencia, ya que podrían convertirse en una dificultad de mantenimiento si se usan en exceso o de manera incorrecta.

Conclusión

El dominio de los selectores en Playwright implica comprender y equilibrar sus fortalezas únicas. Selectores específicos pero flexibles, atributos significativos, código legible y el uso inteligente de selectores compuestos y personalizados son fundamentales para la automatización efectiva. A medida que continúas tu viaje con Playwright, estas pautas te servirán como una brújula, ayudándote a navegar por el complejo mundo de la automatización web. Recuerda, el aprendizaje constante y la adaptación son clave para las pruebas web exitosas con Playwright.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Investigadores descubren miles de nudos transformables

Investigadores descubrieron miles de nuevos nudos transformables a través de un proceso computacional que combina mue...

Ciencia de Datos

Cuidado con los datos poco confiables en la evaluación de modelos un estudio de caso de selección de LLM Prompt con Flan-T5.

La evaluación confiable del modelo es fundamental en MLops y LLMops, guiando decisiones cruciales como cuál modelo o ...

Ciencias de la Computación

Matthew Kearney Trayendo la inteligencia artificial y la filosofía al diálogo.

La doble especialización en informática y filosofía tiene como objetivo avanzar en el campo de la ética de la intelig...

Inteligencia Artificial

La Raspberry Pi rastrea drones invisibles utilizando sonido

Investigadores de las universidades de Texas y Tennessee utilizaron computadoras Raspberry Pi para rastrear drones in...

Inteligencia Artificial

Un 'mapa' más preciso de las luces que ves cuando cierras los ojos puede mejorar los resultados de los 'ojos biónicos'.

Un método de mapeo de fosfenos desarrollado por investigadores de la Universidad de Monash en Australia podría ayudar...