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 * as network from '../network';
|
||||
import { Page, PageBinding } from '../page';
|
||||
import * as path from 'path';
|
||||
import { ConnectionTransport } from '../transport';
|
||||
import * as types from '../types';
|
||||
import { Protocol } from './protocol';
|
||||
@ -252,12 +251,6 @@ export class WKBrowserContext extends BrowserContext {
|
||||
throw result;
|
||||
if (result.isClosed())
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@ import { WKExecutionContext } from './wkExecutionContext';
|
||||
import { WKInterceptableRequest } from './wkInterceptableRequest';
|
||||
import { WKWorkers } from './wkWorkers';
|
||||
import { Page, PageDelegate, PageBinding } from '../page';
|
||||
import * as path from 'path';
|
||||
import { Protocol } from './protocol';
|
||||
import * as dialog from '../dialog';
|
||||
import { RawMouseImpl, RawKeyboardImpl } from './wkInput';
|
||||
@ -114,6 +115,12 @@ export class WKPage implements PageDelegate {
|
||||
for (const [key, value] of this._browserContext._permissions)
|
||||
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);
|
||||
}
|
||||
|
||||
@ -717,7 +724,7 @@ export class WKPage implements PageDelegate {
|
||||
height: options.height,
|
||||
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) {
|
||||
this._recordingVideoFile = null;
|
||||
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);
|
||||
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