{"id":652,"date":"2023-05-13T03:17:06","date_gmt":"2023-05-13T06:17:06","guid":{"rendered":"https:\/\/lahumada.com\/?p=652"},"modified":"2023-05-13T04:26:00","modified_gmt":"2023-05-13T07:26:00","slug":"ejecutando-pruebas-end-to-end-con-playwright","status":"publish","type":"post","link":"https:\/\/lahumada.com\/index.php\/2023\/05\/13\/ejecutando-pruebas-end-to-end-con-playwright\/","title":{"rendered":"Ejecutando pruebas end-to-end con Playwright"},"content":{"rendered":"\n<p>Antes de empezar a trabajar en esta gu\u00eda debemos entender que Playwright se cre\u00f3 espec\u00edficamente para adaptarse a las necesidades de las pruebas end-to-end (E2E). Playwright es compatible con todos los motores modernos: incluidos Chromium, Firefox y Webkit. Podemos ejecutar nuestras pruebas en Windows, Linux, MacOS, localmente o en CI, headless o headed y por supuesto contamos con una emulaci\u00f3n m\u00f3vil nativa completa para Google Chrome en Android o Mobile Safari.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Instalando Playwright Automation Framework<\/strong><\/h2>\n\n\n\n<p>En esta gu\u00eda seguiremos los pasos mencionados en la documentaci\u00f3n oficial de Playwright que podr\u00e1s encontrar&nbsp;<a href=\"https:\/\/playwright.dev\/docs\/intro\" target=\"_blank\" rel=\"noreferrer noopener\">aqu\u00ed<\/a>. Dicho esto, asumir\u00e9 que tendr\u00e1s instalado&nbsp;<a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Visual Studio Code<\/a>, la extensi\u00f3n de&nbsp;<a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-playwright.playwright\" target=\"_blank\" rel=\"noreferrer noopener\">Playwright<\/a>&nbsp;para VS Code y&nbsp;<a href=\"https:\/\/nodejs.org\/en\" target=\"_blank\" rel=\"noreferrer noopener\">Nodejs<\/a>&nbsp;en tu sistema local. Una vez que tengas todo preparado puedes abrir una terminal en VS Code y comenzaremos el proceso de instalaci\u00f3n.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Creamos y navegamos al directorio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>mkdir playwright-training<\/code>cd playwright-training<\/code><\/pre>\n\n\n\n<p>Instalamos la versi\u00f3n m\u00e1s reciente de Playwright y sus dependencias:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm init playwright@latest<\/code><\/pre>\n\n\n\n<p>El proceso de instalaci\u00f3n ser\u00e1 guiado. Para esta gu\u00eda, dejaremos las selecciones por defecto que elegir\u00e1 Playwright durante el proceso (<strong>TypeScript <\/strong>y <strong>.\/tests<\/strong> como la carpeta por defecto para nuestros casos de prueba.<\/p>\n\n\n\n<p>Utilizaremos los casos de demostraci\u00f3n para verificar que la instalaci\u00f3n funciona correctamente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npx playwright test --headed<\/code><\/pre>\n\n\n\n<p>La <strong>versi\u00f3n 1.33<\/strong> de Playwright a\u00f1adi\u00f3 un m\u00f3dulo llamado <strong>UI Mode<\/strong>. Esta funci\u00f3n mejora en gran medida la experiencia del usuario a la hora de ejecutar casos que necesitan debugging, watch mode u otras funcionalidades avanzadas. Para echar un vistazo simplemente ejecuta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npx playwright test --ui<\/code><\/pre>\n\n\n\n<p>Una vez finalizada la ejecuci\u00f3n de tus casos podr\u00e1s abrir el reporte generado para comenzar a familiarizarte con el Framework. Por defecto, Playwright va a generar un reporte en formato <strong>.HTML<\/strong> aunque tambi\u00e9n es posible convertirlo de forma nativa a <strong>.JSON<\/strong> o <strong>.XML (JUnit)<\/strong>. Puedes configurar los reportes para que sean generados en m\u00faltiples formatos, aunque te recomiendo que tambi\u00e9n le eches una mirada a la reporter\u00eda a trav\u00e9s de integraciones de terceros como <a href=\"https:\/\/www.npmjs.com\/package\/allure-playwright\" target=\"_blank\" rel=\"noopener\" title=\"Allure\">Allure<\/a>, <a href=\"https:\/\/github.com\/cenfun\/monocart-reporter\" target=\"_blank\" rel=\"noopener\" title=\"\">Monocart <\/a>o <a href=\"https:\/\/github.com\/reportportal\/agent-js-playwright\" target=\"_blank\" rel=\"noopener\" title=\"ReportPortal\">ReportPortal<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfC\u00f3mo empiezo a automatizar?<\/h2>\n\n\n\n<p>Familiarizarse con el Framework es lo m\u00e1s importante en este punto, por lo tanto, lo primero que pod\u00e9s hacer es grabar casos utilizando el <strong>Code Generator<\/strong> que trae integrado Playwright. A diferencia de otros grabadores, este se encargar\u00e1 de analizar el contenido del sitio web y de proporcionarnos los mejores localizadores para nuestro sitio.  Para eso, abriremos la extensi\u00f3n de Playwright desde la barra lateral de VS Code y luego seleccionaremos el bot\u00f3n <strong>&#8220;Record new&#8221;<\/strong> para comenzar a grabar.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"486\" height=\"614\" src=\"https:\/\/lahumada.com\/wp-content\/uploads\/2023\/05\/2023-05-13-03_37_01.png\" alt=\"\" class=\"wp-image-657\" srcset=\"https:\/\/lahumada.com\/wp-content\/uploads\/2023\/05\/2023-05-13-03_37_01.png 486w, https:\/\/lahumada.com\/wp-content\/uploads\/2023\/05\/2023-05-13-03_37_01-237x300.png 237w, https:\/\/lahumada.com\/wp-content\/uploads\/2023\/05\/2023-05-13-03_37_01-203x256.png 203w\" sizes=\"(max-width: 486px) 100vw, 486px\" \/><\/figure><\/div>\n\n\n<p>Una vez tengamos los pasos de nuestro caso de prueba grabado, bastar\u00e1 con cerrar el navegador web que hayamos seleccionado para la grabaci\u00f3n y procedemos a ejecutar el caso de prueba para analizar los resultados. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Analizando nuestro primer caso de prueba<\/h2>\n\n\n\n<p>A continuaci\u00f3n podr\u00e1s ver el caso de prueba que grab\u00e9 para esta gu\u00eda:<\/p>\n\n\n\n<ol>\n<li>Navegar al sitio web https:\/\/lahumada.com<\/li>\n\n\n\n<li>Completar los campos requeridos del formulario de contacto<\/li>\n\n\n\n<li>Presionar el bot\u00f3n enviar<\/li>\n\n\n\n<li>Validar que el mensaje de envi\u00f3 exitosamente<\/li>\n<\/ol>\n\n\n\n<p>Por lo tanto, mi c\u00f3digo se ve de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { test, expect } from '@playwright\/test';\n\ntest('test', async ({ page }) =&gt; {\n  await page.goto('https:\/\/lahumada.com\/');\n  await page.getByPlaceholder('Nombre completo').click();\n  await page.getByPlaceholder('Nombre completo').fill('Luca Ahumada');\n  await page.getByPlaceholder('Correo electr\u00f3nico').click();\n  await page.getByPlaceholder('Correo electr\u00f3nico').fill('prueba@correodeprueba.com');\n  await page.getByPlaceholder('Escribe tu mensaje').click();\n  await page.getByPlaceholder('Escribe tu mensaje').fill('Este es un mensaje de prueba.');\n  await page.getByRole('button', { name: 'ENVIAR MENSAJE' }).click();\n  await page.getByText('Gracias por dejarme tu mensaje!').click();\n});<\/code><\/pre>\n\n\n\n<p>Si bien el caso funciona correctamente, no estamos realizando ning\u00fan tipo de validaci\u00f3n. Para esto, Playwright nos permitir\u00e1 utilizar diferentes tipos de <a href=\"https:\/\/playwright.dev\/docs\/test-assertions\" target=\"_blank\" rel=\"noopener\" title=\"aserciones\">aserciones<\/a>, permitiendo que podemos validar a trav\u00e9s de un matcher que nuestra expectativa fue cumplida.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { test, expect } from '@playwright\/test';\n\ntest('test', async ({ page }) =&gt; {\n  await page.goto('https:\/\/lahumada.com\/');\n  await page.getByPlaceholder('Nombre completo').click();\n  await page.getByPlaceholder('Nombre completo').fill('Luca Ahumada');\n  await page.getByPlaceholder('Correo electr\u00f3nico').click();\n  await page.getByPlaceholder('Correo electr\u00f3nico').fill('prueba@correodeprueba.com');\n  await page.getByPlaceholder('Escribe tu mensaje').click();\n  await page.getByPlaceholder('Escribe tu mensaje').fill('Este es un mensaje de prueba.');\n  await page.getByRole('button', { name: 'ENVIAR MENSAJE' }).click();\n  await expect(page.getByText('Gracias por dejarme tu mensaje!')).toBeVisible();\n});<\/code><\/pre>\n\n\n\n<p>Playwright incluye matchers (coincidencias) gen\u00e9ricos y algunos m\u00e1s espec\u00edficos a nivel web, que se encargar\u00e1n de esperar que cierta condici\u00f3n se cumpla. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await expect(page.getByText('Gracias por dejarme tu mensaje!')).toBeVisible();<\/code><\/pre>\n\n\n\n<p>En este ejemplo, Playwright buscar\u00e1 constantemente en el contexto que el texto &#8216;Gracias por dejarme tu mensaje!&#8217; se encuentre visible. Buscar\u00e1 una y otra vez este elemento hasta que la condici\u00f3n sea cumplida o hasta que el timeout establecido sea consumido (por defecto son 5 segundos). toBeVisible() por defecto ser\u00e1 <em>true<\/em>, por lo que no es necesario declararlo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Soft Assertions<\/h2>\n\n\n\n<p>Por defecto, las aserciones fallidas har\u00e1n que nuestro caso de prueba en ejecuci\u00f3n sea finalizado. Esta es la raz\u00f3n por la cual Playwright cuenta con soporte para aserciones suaves (soft assertions). Este tipo de aserciones nos permitir\u00e1n continuar con nuestro caso de prueba incluso si la expectativa que ten\u00edamos no fue cumplida (pero marcar\u00e1 el caso como fallido de todos modos).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await expect.soft(page.getByText('Gracias por dejarme tu mensaje!')).toBeVisible();\nawait page.GetByRole('button', { name: 'PUBLICACIONES' }).click()\nawait \/\/ otros pasos<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Playwright es un Framework de automatizaci\u00f3n muy potente y sencillo de utilizar. A pesar de que no hemos podido ver m\u00e1s funciones interesantes que nos trae esta herramienta, espero que haya sido suficiente para despertar ese sentido de la curiosidad y de aprender algo nuevo que llevas en el interior. <\/p>\n\n\n\n<p>Esta herramienta y su comunidad est\u00e1n creciendo a pasos agigantados, sumando cada d\u00eda cientos de proyectos que se est\u00e1n animando a probar algo nuevo. Recordemos que Playwright es un Framework basado en Vite que se est\u00e1 llevando a cabo bajo la marca de Microsoft, por lo que hay grandes expectativas a largo plazo.<\/p>\n\n\n\n<p>Espero que te animes a darle una oportunidad al Grabador de Casos que vimos en esta gu\u00eda o ejecutarlo desde la consola escribiendo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npx playwright codegen<\/code><\/pre>\n\n\n\n<p>Nos vemos en la siguiente entrega. Happy Testing!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Antes de empezar a trabajar en esta gu\u00eda debemos entender que Playwright se cre\u00f3 espec\u00edficamente para adaptarse a las necesidades&#8230; <\/p>\n<div class=\"art-el-more\"><a href=\"https:\/\/lahumada.com\/index.php\/2023\/05\/13\/ejecutando-pruebas-end-to-end-con-playwright\/\" class=\"art-link art-color-link art-w-chevron\">Read more<\/a><\/div>\n","protected":false},"author":1,"featured_media":649,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[25],"tags":[],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/posts\/652"}],"collection":[{"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/comments?post=652"}],"version-history":[{"count":13,"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/posts\/652\/revisions"}],"predecessor-version":[{"id":675,"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/posts\/652\/revisions\/675"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/media\/649"}],"wp:attachment":[{"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/media?parent=652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/categories?post=652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lahumada.com\/index.php\/wp-json\/wp\/v2\/tags?post=652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}