mirror of
https://github.com/microsoft/playwright.git
synced 2024-12-14 21:53:35 +03:00
feat(screencast): fire start evet for popups (#3600)
This commit is contained in:
parent
22e2bf1227
commit
b9d6324d14
@ -21,7 +21,6 @@ import { helper, RegisteredListener } from '../helper';
|
|||||||
import { assert } from '../../utils/utils';
|
import { assert } from '../../utils/utils';
|
||||||
import * as network from '../network';
|
import * as network from '../network';
|
||||||
import { Page, PageBinding } from '../page';
|
import { Page, PageBinding } from '../page';
|
||||||
import * as path from 'path';
|
|
||||||
import { ConnectionTransport } from '../transport';
|
import { ConnectionTransport } from '../transport';
|
||||||
import * as types from '../types';
|
import * as types from '../types';
|
||||||
import { Protocol } from './protocol';
|
import { Protocol } from './protocol';
|
||||||
@ -252,12 +251,6 @@ export class WKBrowserContext extends BrowserContext {
|
|||||||
throw result;
|
throw result;
|
||||||
if (result.isClosed())
|
if (result.isClosed())
|
||||||
throw new Error('Page has been closed.');
|
throw new Error('Page has been closed.');
|
||||||
if (result._browserContext._screencastOptions) {
|
|
||||||
const contextOptions = result._browserContext._screencastOptions;
|
|
||||||
const outputFile = path.join(contextOptions.dir, helper.guid() + '.webm');
|
|
||||||
const options = Object.assign({}, contextOptions, {outputFile});
|
|
||||||
await wkPage.startScreencast(options);
|
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import { WKExecutionContext } from './wkExecutionContext';
|
|||||||
import { WKInterceptableRequest } from './wkInterceptableRequest';
|
import { WKInterceptableRequest } from './wkInterceptableRequest';
|
||||||
import { WKWorkers } from './wkWorkers';
|
import { WKWorkers } from './wkWorkers';
|
||||||
import { Page, PageDelegate, PageBinding } from '../page';
|
import { Page, PageDelegate, PageBinding } from '../page';
|
||||||
|
import * as path from 'path';
|
||||||
import { Protocol } from './protocol';
|
import { Protocol } from './protocol';
|
||||||
import * as dialog from '../dialog';
|
import * as dialog from '../dialog';
|
||||||
import { RawMouseImpl, RawKeyboardImpl } from './wkInput';
|
import { RawMouseImpl, RawKeyboardImpl } from './wkInput';
|
||||||
@ -114,6 +115,12 @@ export class WKPage implements PageDelegate {
|
|||||||
for (const [key, value] of this._browserContext._permissions)
|
for (const [key, value] of this._browserContext._permissions)
|
||||||
this._grantPermissions(key, value);
|
this._grantPermissions(key, value);
|
||||||
}
|
}
|
||||||
|
if (this._browserContext._screencastOptions) {
|
||||||
|
const contextOptions = this._browserContext._screencastOptions;
|
||||||
|
const outputFile = path.join(contextOptions.dir, helper.guid() + '.webm');
|
||||||
|
const options = Object.assign({}, contextOptions, {outputFile});
|
||||||
|
promises.push(this.startScreencast(options));
|
||||||
|
}
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -717,7 +724,7 @@ export class WKPage implements PageDelegate {
|
|||||||
height: options.height,
|
height: options.height,
|
||||||
scale: options.scale,
|
scale: options.scale,
|
||||||
});
|
});
|
||||||
this._browserContext.emit(BrowserContext.Events.ScreencastStarted, new Screencast(options.outputFile, this._initializedPage!));
|
this._browserContext.emit(BrowserContext.Events.ScreencastStarted, new Screencast(options.outputFile, this._page));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this._recordingVideoFile = null;
|
this._recordingVideoFile = null;
|
||||||
throw e;
|
throw e;
|
||||||
|
@ -279,3 +279,26 @@ it.fail(options.CHROMIUM)('should fire start/stop events when page created/close
|
|||||||
expect(stopEvent.page === newPage).toBe(true);
|
expect(stopEvent.page === newPage).toBe(true);
|
||||||
await context.close();
|
await context.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it.fail(options.CHROMIUM)('should fire start event for popups', async({browser, tmpDir, server, toImpl}) => {
|
||||||
|
if (!toImpl)
|
||||||
|
return;
|
||||||
|
// Use server side of the context. All the code below also uses server side APIs.
|
||||||
|
const context = toImpl(await browser.newContext());
|
||||||
|
await context._enableScreencast({width: 640, height: 480, dir: tmpDir});
|
||||||
|
expect(context._screencastOptions).toBeTruthy();
|
||||||
|
|
||||||
|
const page = await context.newPage();
|
||||||
|
await page.mainFrame().goto(server.EMPTY_PAGE);
|
||||||
|
const [startEvent, popup] = await Promise.all([
|
||||||
|
new Promise(resolve => context.on('screencaststarted', resolve)) as Promise<any>,
|
||||||
|
new Promise(resolve => context.on('page', resolve)) as Promise<any>,
|
||||||
|
page.mainFrame()._evaluateExpression(() => {
|
||||||
|
const win = window.open('about:blank');
|
||||||
|
win.close();
|
||||||
|
}, true)
|
||||||
|
]);
|
||||||
|
expect(startEvent.path).toBeTruthy();
|
||||||
|
expect(startEvent.page === popup).toBe(true);
|
||||||
|
await context.close();
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user