js_tgbrowser
Version:
Playwright helpers for connecting to TestGrid remote browsers via Selenium + CDP.
64 lines (51 loc) • 1.56 kB
JavaScript
const registerTestgridFixture = require('./testgrid-register');
function ensureEnv(name, value) {
if (value === undefined || process.env[name] !== undefined) {
return;
}
process.env[name] =
typeof value === 'object' ? JSON.stringify(value) : String(value);
}
function normalizeConfig(settings = {}) {
if (!settings.remoteUrl) {
throw new Error(
'setupTestgrid requires a "remoteUrl" (Selenium hub endpoint) in its configuration.'
);
}
const capabilities = {
...(settings.capabilities || {})
};
return {
remoteUrl: settings.remoteUrl,
capabilities,
cdpProxyPath: settings.cdpProxyPath,
hostHeader: settings.hostHeader,
debugScopes: settings.debugScopes
};
}
function deriveHostHeader(remoteUrl, explicitHostHeader) {
if (explicitHostHeader) {
return explicitHostHeader;
}
try {
return new URL(remoteUrl).hostname || undefined;
} catch (error) {
return undefined;
}
}
function setupTestgrid(settings) {
const config = normalizeConfig(settings);
registerTestgridFixture();
ensureEnv('SELENIUM_REMOTE_URL', config.remoteUrl);
if (config.capabilities && Object.keys(config.capabilities).length) {
ensureEnv('SELENIUM_REMOTE_CAPABILITIES', config.capabilities);
}
ensureEnv('TESTGRID_CDP_PROXY_PATH', config.cdpProxyPath);
config.hostHeader = deriveHostHeader(config.remoteUrl, config.hostHeader);
ensureEnv('TESTGRID_HOST_HEADER', config.hostHeader);
ensureEnv('DEBUG', config.debugScopes);
return config;
}
module.exports = {
setupTestgrid
};