fix(tracing): do not stall on dialogs (#7059)
This commit is contained in:
parent
e4d93cd1f3
commit
cbce7cbdec
|
|
@ -27,6 +27,7 @@ import { CallMetadata, InstrumentationListener, SdkObject } from '../../instrume
|
||||||
import { Page } from '../../page';
|
import { Page } from '../../page';
|
||||||
import * as trace from '../common/traceEvents';
|
import * as trace from '../common/traceEvents';
|
||||||
import { TraceSnapshotter } from './traceSnapshotter';
|
import { TraceSnapshotter } from './traceSnapshotter';
|
||||||
|
import { Dialog } from '../../dialog';
|
||||||
|
|
||||||
export type TracerOptions = {
|
export type TracerOptions = {
|
||||||
name?: string;
|
name?: string;
|
||||||
|
|
@ -128,6 +129,13 @@ export class Tracing implements InstrumentationListener {
|
||||||
return;
|
return;
|
||||||
if (!this._snapshotter.started())
|
if (!this._snapshotter.started())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (sdkObject instanceof Dialog && name === 'before') {
|
||||||
|
// A call on the dialog is going to dismiss it and resume the evaluation.
|
||||||
|
// We can't be capturing the snapshot before dismiss action is performed.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const snapshotName = `${name}@${metadata.id}`;
|
const snapshotName = `${name}@${metadata.id}`;
|
||||||
metadata.snapshots.push({ title: name, snapshotName });
|
metadata.snapshots.push({ title: name, snapshotName });
|
||||||
await this._snapshotter!.captureSnapshot(sdkObject.attribution.page, snapshotName, element);
|
await this._snapshotter!.captureSnapshot(sdkObject.attribution.page, snapshotName, element);
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,21 @@ test('should collect two traces', async ({ context, page, server }, testInfo) =>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should not stall on dialogs', async ({ page, context, server }) => {
|
||||||
|
await context.tracing.start({ screenshots: true, snapshots: true });
|
||||||
|
await page.goto(server.EMPTY_PAGE);
|
||||||
|
|
||||||
|
page.on('dialog', async dialog => {
|
||||||
|
await dialog.accept();
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.evaluate(() => {
|
||||||
|
confirm('are you sure');
|
||||||
|
});
|
||||||
|
await context.tracing.stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
for (const params of [
|
for (const params of [
|
||||||
{
|
{
|
||||||
id: 'fit',
|
id: 'fit',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue