fix(api): remove BrowserServer.connect (#574)

This commit is contained in:
Dmitry Gozman 2020-01-23 08:51:43 -08:00 committed by GitHub
parent a6042e437a
commit fa2f321fdd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 28 additions and 57 deletions

View File

@ -3373,7 +3373,6 @@ const newWindowTarget = await browser.chromium.waitForTarget(target => target.ur
<!-- GEN:toc -->
- [chromiumBrowserServer.close()](#chromiumbrowserserverclose)
- [chromiumBrowserServer.connect()](#chromiumbrowserserverconnect)
- [chromiumBrowserServer.connectOptions()](#chromiumbrowserserverconnectoptions)
- [chromiumBrowserServer.process()](#chromiumbrowserserverprocess)
- [chromiumBrowserServer.wsEndpoint()](#chromiumbrowserserverwsendpoint)
@ -3384,11 +3383,6 @@ const newWindowTarget = await browser.chromium.waitForTarget(target => target.ur
Closes the browser gracefully and makes sure the process is terminated.
#### chromiumBrowserServer.connect()
- returns: <[Promise]<[ChromiumBrowser]>>
Connects to the browser server and returns a <[ChromiumBrowser]> object.
#### chromiumBrowserServer.connectOptions()
- returns: <[Object]>
- `browserWSEndpoint` <?[string]> a [browser websocket endpoint](#browserwsendpoint) to connect to.
@ -3567,7 +3561,6 @@ Firefox browser instance does not expose Firefox-specific features.
<!-- GEN:toc -->
- [firefoxBrowserServer.close()](#firefoxbrowserserverclose)
- [firefoxBrowserServer.connect()](#firefoxbrowserserverconnect)
- [firefoxBrowserServer.connectOptions()](#firefoxbrowserserverconnectoptions)
- [firefoxBrowserServer.process()](#firefoxbrowserserverprocess)
- [firefoxBrowserServer.wsEndpoint()](#firefoxbrowserserverwsendpoint)
@ -3578,11 +3571,6 @@ Firefox browser instance does not expose Firefox-specific features.
Closes the browser gracefully and makes sure the process is terminated.
#### firefoxBrowserServer.connect()
- returns: <[Promise]<[FirefoxBrowser]>>
Connects to the browser server and returns a <[FirefoxBrowser]> object.
#### firefoxBrowserServer.connectOptions()
- returns: <[Object]>
- `browserWSEndpoint` <?[string]> a [browser websocket endpoint](#browserwsendpoint) to connect to.
@ -3680,7 +3668,6 @@ WebKit browser instance does not expose WebKit-specific features.
<!-- GEN:toc -->
- [webKitBrowserServer.close()](#webkitbrowserserverclose)
- [webKitBrowserServer.connect()](#webkitbrowserserverconnect)
- [webKitBrowserServer.connectOptions()](#webkitbrowserserverconnectoptions)
- [webKitBrowserServer.process()](#webkitbrowserserverprocess)
- [webKitBrowserServer.wsEndpoint()](#webkitbrowserserverwsendpoint)
@ -3691,11 +3678,6 @@ WebKit browser instance does not expose WebKit-specific features.
Closes the browser gracefully and makes sure the process is terminated.
#### webKitBrowserServer.connect()
- returns: <[Promise]<[WebKitBrowser]>>
Connects to the browser server and returns a <[WebKitBrowser]> object.
#### webKitBrowserServer.connectOptions()
- returns: <[Object]>
- `slowMo` <[number]>

View File

@ -66,13 +66,6 @@ export class CRBrowserServer {
this._connectOptions = connectOptions;
}
async connect(): Promise<CRBrowser> {
const browser = await CRBrowser.connect(this._connectOptions);
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
browser.close = this._gracefullyClose;
return browser;
}
process(): ChildProcess {
return this._process;
}
@ -101,7 +94,10 @@ export class CRPlaywright implements Playwright {
async launch(options?: LaunchOptions): Promise<CRBrowser> {
const server = await this.launchServer(options);
return server.connect();
const browser = await CRBrowser.connect(server.connectOptions());
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
browser.close = () => server.close();
return browser;
}
async launchServer(options: LaunchOptions = {}): Promise<CRBrowserServer> {

View File

@ -63,13 +63,6 @@ export class FFBrowserServer {
this._connectOptions = connectOptions;
}
async connect(): Promise<FFBrowser> {
const browser = await FFBrowser.connect(this._connectOptions);
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
browser.close = this._gracefullyClose;
return browser;
}
process(): ChildProcess {
return this._process;
}
@ -98,7 +91,10 @@ export class FFPlaywright implements Playwright {
async launch(options: LaunchOptions): Promise<FFBrowser> {
const server = await this.launchServer(options);
return server.connect();
const browser = await FFBrowser.connect(server.connectOptions());
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
browser.close = () => server.close();
return browser;
}
async launchServer(options: LaunchOptions = {}): Promise<FFBrowserServer> {

View File

@ -69,13 +69,6 @@ export class WKBrowserServer {
this._connectOptions = connectOptions;
}
async connect(): Promise<WKBrowser> {
const browser = await WKBrowser.connect(this._connectOptions);
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
browser.close = this._gracefullyClose;
return browser;
}
process(): ChildProcess {
return this._process;
}
@ -104,7 +97,10 @@ export class WKPlaywright implements Playwright {
async launch(options?: LaunchOptions): Promise<WKBrowser> {
const server = await this.launchServer(options);
return server.connect();
const browser = await WKBrowser.connect(server.connectOptions());
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
browser.close = () => server.close();
return browser;
}
async launchServer(options: LaunchOptions = {}): Promise<WKBrowserServer> {

View File

@ -25,7 +25,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
describe('Playwright.connect', function() {
it('should be able to connect multiple times to the same browser', async({server}) => {
const browserServer = await playwright.launchServer(defaultBrowserOptions);
const local = await browserServer.connect();
const local = await playwright.connect(browserServer.connectOptions());
const remote = await playwright.connect({
...defaultBrowserOptions,
browserWSEndpoint: browserServer.wsEndpoint()
@ -40,7 +40,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
});
it('should be able to close remote browser', async({server}) => {
const browserServer = await playwright.launchServer(defaultBrowserOptions);
const local = await browserServer.connect();
const local = await playwright.connect(browserServer.connectOptions());
const remote = await playwright.connect({
...defaultBrowserOptions,
browserWSEndpoint: browserServer.wsEndpoint()
@ -53,7 +53,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
// @see https://github.com/GoogleChrome/puppeteer/issues/4197#issuecomment-481793410
it('should be able to connect to the same page simultaneously', async({server}) => {
const browserServer = await playwright.launchServer(defaultBrowserOptions);
const local = await browserServer.connect();
const local = await playwright.connect(browserServer.connectOptions());
const remote = await playwright.connect({ ...defaultBrowserOptions, browserWSEndpoint: browserServer.wsEndpoint() });
const [page1, page2] = await Promise.all([
new Promise(x => local.once('targetcreated', target => x(target.page()))),

View File

@ -161,7 +161,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
it('should support the pipe option', async() => {
const options = Object.assign({pipe: true}, defaultBrowserOptions);
const browserServer = await playwright.launchServer(options);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
expect((await browser.defaultContext().pages()).length).toBe(1);
expect(browserServer.wsEndpoint()).toBe(null);
const page = await browser.defaultContext().newPage();
@ -173,7 +173,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
const options = Object.assign({}, defaultBrowserOptions);
options.args = ['--remote-debugging-pipe'].concat(options.args || []);
const browserServer = await playwright.launchServer(options);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
expect(browserServer.wsEndpoint()).toBe(null);
const page = await browser.defaultContext().newPage();
expect(await page.evaluate('11 * 11')).toBe(121);
@ -183,7 +183,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
it('should fire "disconnected" when closing with pipe', async() => {
const options = Object.assign({pipe: true}, defaultBrowserOptions);
const browserServer = await playwright.launchServer(options);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
const disconnectedEventPromise = new Promise(resolve => browser.once('disconnected', resolve));
// Emulate user exiting browser.
browserServer.process().kill();
@ -210,7 +210,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
describe('Browser.Events.disconnected', function() {
it('should be emitted when: browser gets closed, disconnected or underlying websocket gets closed', async() => {
const browserServer = await playwright.launchServer(defaultBrowserOptions);
const originalBrowser = await browserServer.connect();
const originalBrowser = await playwright.connect(browserServer.connectOptions());
const browserWSEndpoint = browserServer.wsEndpoint();
const remoteBrowser1 = await playwright.connect({browserWSEndpoint});
const remoteBrowser2 = await playwright.connect({browserWSEndpoint});

View File

@ -140,7 +140,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
describe('Playwright.connect', function() {
it.skip(WEBKIT)('should be able to reconnect to a browser', async({server}) => {
const browserServer = await playwright.launchServer(defaultBrowserOptions);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
const browserWSEndpoint = browserServer.wsEndpoint();
const page = await browser.defaultContext().newPage();
await page.goto(server.PREFIX + '/frames/nested-frames.html');

View File

@ -91,7 +91,7 @@ module.exports.describe = ({testRunner, product, playwrightPath}) => {
describe('Browser', function() {
beforeAll(async state => {
state.browserServer = await playwright.launchServer(defaultBrowserOptions);
state.browser = await state.browserServer.connect();
state.browser = await playwright.connect(state.browserServer.connectOptions());
});
afterAll(async state => {

View File

@ -23,7 +23,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
beforeAll(async state => {
state.controlledBrowserServer = await playwright.launchServer({ ...defaultBrowserOptions, pipe: false });
state.hostBrowserServer = await playwright.launchServer(defaultBrowserOptions);
state.hostBrowser = await state.hostBrowserServer.connect();
state.hostBrowser = await playwright.connect(state.hostBrowserServer.connectOptions());
});
afterAll(async state => {

View File

@ -31,7 +31,7 @@ module.exports.describe = function ({ testRunner, expect, playwright, defaultBro
it('should have websocket by default', async() => {
const options = Object.assign({pipe: false}, defaultBrowserOptions);
const browserServer = await playwright.launchServer(options);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
expect((await browser.defaultContext().pages()).length).toBe(1);
expect(browserServer.wsEndpoint()).not.toBe(null);
const page = await browser.defaultContext().newPage();
@ -42,7 +42,7 @@ module.exports.describe = function ({ testRunner, expect, playwright, defaultBro
it('should support the pipe option', async() => {
const options = Object.assign({pipe: true}, defaultBrowserOptions);
const browserServer = await playwright.launchServer(options);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
expect((await browser.defaultContext().pages()).length).toBe(1);
expect(browserServer.wsEndpoint()).toBe(null);
const page = await browser.defaultContext().newPage();
@ -53,7 +53,7 @@ module.exports.describe = function ({ testRunner, expect, playwright, defaultBro
it('should fire "disconnected" when closing with pipe', async() => {
const options = Object.assign({pipe: true}, defaultBrowserOptions);
const browserServer = await playwright.launchServer(options);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
const disconnectedEventPromise = new Promise(resolve => browser.once('disconnected', resolve));
// Emulate user exiting browser.
process.kill(-browserServer.process().pid, 'SIGKILL');
@ -62,7 +62,7 @@ module.exports.describe = function ({ testRunner, expect, playwright, defaultBro
it('should fire "disconnected" when closing with websocket', async() => {
const options = Object.assign({pipe: false}, defaultBrowserOptions);
const browserServer = await playwright.launchServer(options);
const browser = await browserServer.connect();
const browser = await playwright.connect(browserServer.connectOptions());
const disconnectedEventPromise = new Promise(resolve => browser.once('disconnected', resolve));
// Emulate user exiting browser.
process.kill(-browserServer.process().pid, 'SIGKILL');

View File

@ -12,7 +12,8 @@ async function generateChromiunProtocol(revision) {
const playwright = await require('../../index').chromium;
const browserServer = await playwright.launchServer({executablePath: revision.executablePath});
const origin = browserServer.wsEndpoint().match(/ws:\/\/([0-9A-Za-z:\.]*)\//)[1];
const page = await (await browserServer.connect()).defaultContext().newPage();
const browser = await playwright.connect(browserServer.connectOptions());
const page = await browser.defaultContext().newPage();
await page.goto(`http://${origin}/json/protocol`);
const json = JSON.parse(await page.evaluate(() => document.documentElement.innerText));
await browserServer.close();