1- import { After , AfterStep , Before , BeforeStep , Status } from '@cucumber/cucumber' ;
1+ import { After , AfterStep , Before , BeforeStep } from '@cucumber/cucumber' ;
22import defaultTimeouts from './defaultTimeouts' ;
33import { Browser , BrowserContext , Page } from 'playwright' ;
44import { po } from '@qavajs/po-playwright' ;
5- import { ScreenshotEvent } from './screenshotEvent' ;
65import { driverProvider } from './driverProvider' ;
6+ import { saveScreenshotAfterStep , saveScreenshotBeforeStep , saveTrace , traceArchive } from './utils/utils' ;
7+ import { readFile } from 'fs/promises' ;
78
89declare global {
910 var browser : Browser ;
@@ -19,16 +20,23 @@ Before(async function () {
1920 defaultTimeouts,
2021 ...driverConfig . timeout
2122 }
22- global . browser = await driverProvider ( driverConfig ) ;
23+ config . driverConfig = driverConfig ;
24+ global . browser = await driverProvider ( config . driverConfig ) ;
2325 global . context = await browser . newContext ( { viewport : null } ) ;
26+ if ( config . driverConfig . trace ) {
27+ await context . tracing . start ( {
28+ screenshots : true ,
29+ snapshots : true
30+ } )
31+ }
2432 global . page = await context . newPage ( ) ;
2533 global . driver = global . browser ;
26- po . init ( page , { timeout : driverConfig . timeout . present } ) ;
34+ po . init ( page , { timeout : config . driverConfig . timeout . present } ) ;
2735 po . register ( config . pageObject ) ;
2836} ) ;
2937
3038BeforeStep ( async function ( ) {
31- if ( config . screenshot === ScreenshotEvent . BEFORE_STEP ) {
39+ if ( saveScreenshotBeforeStep ( config ) ) {
3240 try {
3341 this . attach ( await page . screenshot ( ) , 'image/png' ) ;
3442 } catch ( err ) {
@@ -39,18 +47,23 @@ BeforeStep(async function () {
3947
4048AfterStep ( async function ( step ) {
4149 try {
42- if (
43- ( config . screenshot === ScreenshotEvent . ON_FAIL && step . result . status === Status . FAILED ) ||
44- config . screenshot === ScreenshotEvent . AFTER_STEP
45- ) {
50+ if ( saveScreenshotAfterStep ( config , step ) ) {
4651 this . attach ( await page . screenshot ( ) , 'image/png' ) ;
4752 }
4853 } catch ( err ) {
4954 console . warn ( err )
5055 }
5156} ) ;
5257
53- After ( async function ( ) {
58+ After ( async function ( scenario ) {
59+ if ( saveTrace ( config . driverConfig , scenario ) ) {
60+ const path = traceArchive ( config . driverConfig , scenario ) ;
61+ await context . tracing . stop ( { path } ) ;
62+ if ( config . driverConfig ?. trace . attach ) {
63+ const zipBuffer : Buffer = await readFile ( path ) ;
64+ this . attach ( zipBuffer . toString ( 'base64' ) , 'base64:application/zip' ) ;
65+ }
66+ }
5467 if ( global . browser ) {
5568 await browser . close ( ) ;
5669 }
0 commit comments