Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

325
Views
Dramaturgo antes de cada uno de todos los archivos de especificaciones

Soy muy nuevo en Dramaturgia. Debido a mis suites de prueba, necesito iniciar sesión en mi aplicación antes de ejecutar cada prueba. Dentro de un solo archivo de especificaciones que es fácil, simplemente puedo llamar a test.beforeEach . Mi problema es: necesito hacerlo antes del inicio de sesión antes de cada prueba de cada archivo de especificaciones.

 test.describe('Test', () => { //I need to make the code inside this beforeEach a exported //function to call inside the before each of every spec file I have test.beforeEach(async ({ page }) => { await page.goto('/login'); await page.click('text=Log in with Google account'); await page.fill('id=identifierId', LoginAutomationCredentials.USER); await page.click('button[jsname="LgbsSe"]'); await page.fill('input[type="password"]', LoginAutomationCredentials.PASSWORD); await page.click('button[jsname="LgbsSe"]'); const otp = authenticator.generateToken(LoginAutomationCredentials.TOKEN); await page.fill('id=totpPin', otp); await page.click('button[jsname="LgbsSe"]'); }); it('Some description', async ({ page }) => { await page.goto('/foo'); const dateFilter = await page.inputValue('input[placeholder="2011/03/02"]'); expect(dateFilter).toBe('2021/12/07'); }); });

Intenté simplemente tomar ese código y convertirlo en una función dentro de un archivo .ts separado y luego importarlo, pero pensé que se necesitaba el contexto para hacer esto. Esto es probablemente algo que todos los probadores que usan dramaturgo conocen y usan regularmente, sin embargo, no encontré nada sobre el tema.

¿Cómo puedo evitar copiar todo el código de beforeEach y pegarlo en todos mis archivos de especificaciones? ¿Cómo puedo convertirlo en una función y llamarlo cuando quiera?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Usa accesorios.

accesorio.js:

 const base = require('@playwright/test') const newTest = base.test.extend({ login: async({page}, use) => { await login(); await use(page); //runs test here //logic after test } }) exports.newTest = newTest exports.expect = newTest.expect

Luego en tus pruebas:

 const {newTest} = require('fixture.js') newTest('mytest', async ({login}) => { //test logic login.goto(''); // using login here since I pass it as page in the fixture. })
about 4 years ago · Juan Pablo Isaza Report

0

Fixtures es la forma correcta, pero hay una mejor opción que tener que recordar usar el inicio de login en lugar de la page cuando desea iniciar sesión. Así es como lo hago...

Primero tengo esto en playwright/src/index.ts donde configuro todos los accesorios para mi proyecto:

 import { test as base_test, expect } from 'playwright_test'; type TestFixtures = { user: string; }; export const test = base_test.extend<TestFixtures>( { user : 'default-user@example.com', async context( { user, context, request }, use ) { // This makes a REST request to the backend to get a JWT token // and then stores that token in the browsers localStorage, // but you could replace this with whatever makes sense for auth // in your app if ( user ) { const content = await getAuthScript( user, request ); await context.addInitScript( { content } ); } await use( context ); }, } ); /** * This makes a REST request to the backend to get a JWT token * and then stores that token in the browsers localStorage, * but you could replace this with whatever makes sense for auth * in your app. */ async function getAuthScript( user, request ) { const res = await request.post( '/api/test/auth', { data : { user } } ); const { token } = await res.json(); return `window.localStorage.setItem( 'jwt-token', "${token}" );`; } export { test, expect }

También me aseguro de que playwright/tsconfig.json incluya esto:

 { "extends": "../path/to/base/tsconfig.json", "compilerOptions": { "noEmit": true, "paths": { "~": [ "./src" ], "~*": [ "./src/*" ] }, "baseUrl": ".", "rootUrl": ".", }, "include": [ "src/**/*.ts", "test/**/*.ts" ], }

Ahora cada prueba iniciará sesión automáticamente como default-user@example.com , pero si necesita una prueba para iniciar sesión como un usuario diferente, todo lo que necesita hacer en ese archivo de prueba es:

 import { test, expect } from '~'; test.use( { user : 'somebody-else@example.com' } ); test( 'can login as somebody-else', async ( { page } ) => { // Run your tests here... } );
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!