@qavajs/steps-playwright
Version:
qavajs steps to interact with playwright
42 lines (36 loc) • 1.48 kB
text/typescript
import { saveTrace, traceArchive } from './utils';
import { readFile } from 'node:fs/promises';
import { Tracing } from '@playwright/test';
class TracingManager {
isTracingStarted = false;
tracing!: Tracing;
async start(driverConfig: any, world: any) {
if (driverConfig.trace) {
if (!driverConfig.reuseSession || (driverConfig.reuseSession && !this.isTracingStarted)) {
this.isTracingStarted = true;
this.tracing = world.playwright.context.tracing;
await this.tracing.start({
screenshots: driverConfig.trace.screenshots ?? true,
snapshots: driverConfig.trace.snapshots ?? true,
sources: false
});
}
await world.playwright.context.tracing.startChunk();
}
}
async stop(driverConfig: any, world: any, scenario: any) {
if (saveTrace(driverConfig, scenario)) {
const path = traceArchive(driverConfig, scenario);
try {
await this.tracing.stopChunk({ path });
if (driverConfig?.trace.attach) {
const zipBuffer: Buffer = await readFile(path);
world.attach(zipBuffer.toString('base64'), 'base64:application/zip');
}
} catch (err) {
console.warn('Trace was not recorded');
}
}
}
}
export default new TracingManager();