Hooks
Clase 14 de 15 • Curso de Automatización de Pruebas con Puppeteer
Contenido del curso
Clase 14 de 15 • Curso de Automatización de Pruebas con Puppeteer
Contenido del curso
Juan David Rojas Restrepo
Oscar David Castro Beltran
Agustin Cammarota Muti
Jesus Cuadro
Alejandro Yung
Javier Fuentes Mora
Mario Alexander Vargas Celis
Diego Alexander Fino Ariza
Mi reacción 🤯 al ver todo el tiempo de prueba y de código que se reduce con la implementación de los hooks.
Actualmente beforeEach, beforeAll, afterEach y afterAll no están funcionando :(
Aporte de codigo:
const puppeteer = require('puppeteer'); describe('Time outs', () => { let browser; let page; beforeAll(async () => { jest.setTimeout(1000); browser = await puppeteer.launch({ headless: false, defaultViewport: null }); }); afterEach(async () => { page = ''; await browser.close(); }); beforeEach(async () => { page = await browser.newPage(); page.setDefaultTimeout(10000); page.setDefaultNavigationTimeout(10000); await page.goto('https://platzi.com/', { waitUntil: 'networkidle2' }); }); test('should selector', async () => { const selector = await page.waitForSelector('#cms-landings > section > section.Hero > div > p.Hero-content-message'); const validate = await page.evaluate((selector) => selector.innerText, selector); expect(validate).toBe('¿Qué quieres lograr?'); }); });
Resumen de la clase :)
let browser let page // Antes de cada test beforeEach(async() => { browser = await puppeteer.launch({ headless: false, defaultViewport: null, }) page = await browser.newPage() }) // Despues de cada test afterEach(async()=>{ await browser.close() }) // Antes de todos los tests beforeAll(async() => { browser = await puppeteer.launch({ headless: false, defaultViewport: null, }) page = await browser.newPage() }) // Despues de todos los tests afterAll(async()=>{ await browser.close() })
Hola, mi duda es si describe, it, y los hook son de JS o es algo que funciona sólo con jest ?
son de jest
const puppeteer = require("puppeteer") describe("Extrayendo informacion",()=>{ let browser let page beforeAll(async()=>{ //beforeAll lo inicia antes de las pruebas y beforeEach lo abre en cada prueba browser = await puppeteer.launch({ headless:false, defaultViewport: null, //slowMo: 500 }); page = await browser.newPage(); await page.goto("https://platzi.com", {waitUntil: "networkidle2"}); }); afterAll(async ()=>{ //afterAll lo cierra despuesde las pruebas yafterEach lo ciarra al terminar cada prueba await browser.close(); }) it("Extraer el titulo de la pagina y url", async()=>{ const titulo = await page.title(); const url = await page.url(); console.log("titulo", titulo); console.log("url", url); //await new Promise((resolve) => setTimeout(resolve, 3000)); },35000); it("Extraer la información d eun elemento", async()=>{ await page.waitForSelector("body > main > header > div > nav > ul > li:nth-child(4) > a"); const nombreBoton = await page.$eval("body > main > header > div > nav > ul > li:nth-child(4) > a", (button) => button.textContent); const [button] = await page.$x("/html/body/main/section[1]/a/div/div[2]/div[2]/button"); const propiedad = await button.getProperty("textContent"); const texto = await propiedad.jsonValue(); //console.log("texto", texto); //Segunda Forma const texto2 = await page.evaluate((name)=>name.testContent, button); const button3 = await page.waitForXPath("/html/body/main/section[1]/a/div/div[2]/div[2]/button"); const texto3 = await page.evaluate((name)=>name.testContent, button3); console.log("texto3", texto3); },35000); it("Contar los elementos d euna pagina", async()=>{ const images = await page.$$eval("img",(imagenes) => imagenes.length); console.log("images", images) },35000); },50000); ```const puppeteer = require("puppeteer") describe("Extrayendo informacion",()=>{ let browser let page beforeAll(async()=>{ //beforeAll lo inicia antes de las pruebas y beforeEach lo abre en cada prueba browser = await puppeteer.launch({ headless:false, defaultViewport: null, //slowMo: 500 }); page = await browser.newPage(); await page.goto("https://platzi.com", {waitUntil: "networkidle2"}); }); afterAll(async ()=>{ //afterAll lo cierra despuesde las pruebas yafterEach lo ciarra al terminar cada prueba await browser.close(); }) it("Extraer el titulo de la pagina y url", async()=>{ const titulo = await page.title(); const url = await page.url(); console.log("titulo", titulo); console.log("url", url);   //await new Promise((resolve) => setTimeout(resolve, 3000)); },35000); it("Extraer la información d eun elemento", async()=>{ await page.waitForSelector("body > main > header > div > nav > ul > li:nth-child(4) > a"); const nombreBoton = await page.$eval("body > main > header > div > nav > ul > li:nth-child(4) > a", (button) => button.textContent); const \[button] = await page.$x("/html/body/main/section\[1]/a/div/div\[2]/div\[2]/button"); const propiedad = await button.getProperty("textContent"); const texto = await propiedad.jsonValue(); //console.log("texto", texto); //Segunda Forma const texto2 = await page.evaluate((name)=>name.testContent, button); const button3 = await page.waitForXPath("/html/body/main/section\[1]/a/div/div\[2]/div\[2]/button"); const texto3 = await page.evaluate((name)=>name.testContent, button3); console.log("texto3", texto3); },35000); it("Contar los elementos d euna pagina", async()=>{ const images = await page.$$eval("img",(imagenes) => imagenes.length); console.log("images", images) },35000); },50000);
Por algún motivo no me funcionaban los test, ya que aparecía el navegador muy rápido y estaba en blando la solución que me funciono fue definirle un tiempo a beforeEach y afterEach Espero les funcione
let browser let page let globalTime = 10000 beforeEach(async () => { browser = await puppeteer.launch({ headless: false, slowMo: 0, devtools: false, defaultViewport: null }) page = await browser.newPage() }, globalTime) afterEach(async () => { await browser.close(); }, globalTime)