feat(remote): send browser/channel/headless in a header (#12205)

This commit is contained in:
Dmitry Gozman 2022-02-18 07:54:33 -08:00 committed by GitHub
parent 34eec7eae7
commit edac84d072
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 7 deletions

View file

@ -141,9 +141,9 @@ class Connection {
if (browser) if (browser)
return await this._initPreLaunchedBrowserMode(scope, browser); return await this._initPreLaunchedBrowserMode(scope, browser);
const url = new URL('http://localhost' + (request.url || '')); const url = new URL('http://localhost' + (request.url || ''));
const browserHeader = request.headers['X-Playwright-Browser']; const browserHeader = request.headers['x-playwright-browser'];
const browserAlias = url.searchParams.get('browser') || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader); const browserAlias = url.searchParams.get('browser') || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader);
const proxyHeader = request.headers['X-Playwright-Proxy']; const proxyHeader = request.headers['x-playwright-proxy'];
const proxyValue = url.searchParams.get('proxy') || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader); const proxyValue = url.searchParams.get('proxy') || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader);
if (!browserAlias) if (!browserAlias)
return await this._initPlaywrightConnectMode(scope, enableSocksProxy && proxyValue === '*'); return await this._initPlaywrightConnectMode(scope, enableSocksProxy && proxyValue === '*');

View file

@ -106,11 +106,18 @@ export const test = _baseTest.extend<TestFixtures, WorkerFixtures>({
(browserType as any)._defaultLaunchOptions = undefined; (browserType as any)._defaultLaunchOptions = undefined;
}, { scope: 'worker', auto: true }], }, { scope: 'worker', auto: true }],
browser: [async ({ playwright, browserName, connectOptions }, use) => { browser: [async ({ playwright, browserName, channel, headless, connectOptions }, use) => {
if (!['chromium', 'firefox', 'webkit'].includes(browserName)) if (!['chromium', 'firefox', 'webkit'].includes(browserName))
throw new Error(`Unexpected browserName "${browserName}", must be one of "chromium", "firefox" or "webkit"`); throw new Error(`Unexpected browserName "${browserName}", must be one of "chromium", "firefox" or "webkit"`);
if (connectOptions) { if (connectOptions) {
const browser = await playwright[browserName].connect(connectOptions); const browser = await playwright[browserName].connect({
wsEndpoint: connectOptions.wsEndpoint,
headers: {
'x-playwright-browser': channel || browserName,
'x-playwright-headless': headless ? '1' : '0',
...connectOptions.headers,
}
});
await use(browser); await use(browser);
await browser.close(); await browser.close();
return; return;

View file

@ -59,6 +59,7 @@ const config: Config<CoverageWorkerOptions & PlaywrightWorkerOptions & Playwrigh
['html', { open: 'on-failure' }] ['html', { open: 'on-failure' }]
], ],
projects: [], projects: [],
use: {},
}; };
if (mode === 'service') { if (mode === 'service') {
@ -75,6 +76,9 @@ if (mode === 'service2') {
port: 3333, port: 3333,
reuseExistingServer: true, reuseExistingServer: true,
}; };
config.use.connectOptions = {
wsEndpoint: 'ws://localhost:3333/',
};
} }
const browserNames = ['chromium', 'webkit', 'firefox'] as BrowserName[]; const browserNames = ['chromium', 'webkit', 'firefox'] as BrowserName[];
@ -101,9 +105,6 @@ for (const browserName of browserNames) {
}, },
trace: trace ? 'on' : undefined, trace: trace ? 'on' : undefined,
coverageName: browserName, coverageName: browserName,
connectOptions: mode === 'service2' ? {
wsEndpoint: 'ws://localhost:3333/?browser=' + (channel || browserName),
} : undefined,
}, },
metadata: { metadata: {
platform: process.platform, platform: process.platform,