@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
116 lines • 8.1 kB
JavaScript
const DEFAULT_HOSTNAME = '127.0.0.1';
const DEFAULT_PORT = 4444;
const DEFAULT_PROTOCOL = 'http';
const DEFAULT_PATH = '/';
const LEGACY_PATH = '/wd/hub';
const REGION_MAPPING = {
'us': 'us-west-1.', // default endpoint
'eu': 'eu-central-1.',
'eu-central-1': 'eu-central-1.',
'us-east-1': 'us-east-1.',
'apac': 'apac-southeast-1.',
'apac-southeast-1': 'apac-southeast-1',
};
function getSauceEndpoint(region, { isRDC, isVisual } = {}) {
const shortRegion = REGION_MAPPING[region] ? region : 'us';
if (isRDC) {
return `${shortRegion}1.appium.testobject.com`;
}
else if (isVisual) {
return 'hub.screener.io';
}
return `ondemand.${REGION_MAPPING[shortRegion]}saucelabs.com`;
}
/**
* helper to detect the Selenium backend according to given capabilities
*/
export default function detectBackend(options = {}) {
const { port, hostname, user, key, protocol, region, headless, path, capabilities } = options;
/**
* browserstack
* e.g. zHcv9sZ39ip8ZPsxBVJ2
*/
if (typeof user === 'string' && typeof key === 'string' && key.length === 20) {
return {
protocol: protocol || 'https',
hostname: hostname || 'hub-cloud.browserstack.com',
port: port || 443,
path: path || LEGACY_PATH
};
}
/**
* testingbot
* e.g. ec337d7b677720a4dde7bd72be0bfc67
*/
if (typeof user === 'string' && typeof key === 'string' && key.length === 32) {
return {
protocol: protocol || 'https',
hostname: hostname || 'hub.testingbot.com',
port: port || 443,
path: path || LEGACY_PATH
};
}
/**
* Sauce Labs
* e.g. 50aa152c-1932-B2f0-9707-18z46q2n1mb0
*
* For Sauce Labs Legacy RDC we only need to determine if the sauce option has a `testobject_api_key`.
* Same for Sauce Visual where an apiKey can be passed in through the capabilities (soon to be legacy too).
*/
const isRDC = Boolean(!Array.isArray(capabilities) && capabilities?.testobject_api_key);
const isVisual = Boolean(!Array.isArray(capabilities) && capabilities && capabilities['sauce:visual']?.apiKey);
if ((typeof user === 'string' && typeof key === 'string' && key.length === 36) ||
// Or only RDC or visual
(isRDC || isVisual)) {
// Sauce headless is currently only in us-east-1
const sauceRegion = headless ? 'us-east-1' : region;
return {
protocol: protocol || 'https',
hostname: hostname || getSauceEndpoint(sauceRegion, { isRDC, isVisual }),
port: port || 443,
path: path || LEGACY_PATH
};
}
/**
* Lambdatest
* e.g. cYAjKrqGwyPjPQv41ICDF4C5OjlxzA9epZsnugVJJxqOReWRWU
*/
if (typeof user === 'string' && typeof key === 'string' && key.length === 50) {
return {
protocol: protocol || DEFAULT_PROTOCOL,
hostname: hostname || 'hub.lambdatest.com',
port: port || 80,
path: path || LEGACY_PATH
};
}
if (
/**
* user and key are set in config
*/
(typeof user === 'string' || typeof key === 'string') &&
/**
* but no custom WebDriver endpoint was configured
*/
!hostname) {
throw new Error('A "user" or "key" was provided but could not be connected to a ' +
'known cloud service (Sauce Labs, Browerstack, Testingbot or Lambdatest). ' +
'Please check if given user and key properties are correct!');
}
/**
* default values if on of the WebDriver criticial options is set
*/
if (hostname || port || protocol || path) {
return {
hostname: hostname || DEFAULT_HOSTNAME,
port: port || DEFAULT_PORT,
protocol: protocol || DEFAULT_PROTOCOL,
path: path || DEFAULT_PATH
};
}
/**
* no cloud provider detected, pass on provided params and eventually
* fallback to DevTools protocol
*/
return { hostname, port, protocol, path };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0QmFja2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZXRlY3RCYWNrZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFBO0FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQTtBQUN6QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQTtBQUMvQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUE7QUFDeEIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFBO0FBRTdCLE1BQU0sY0FBYyxHQUFHO0lBQ25CLElBQUksRUFBRSxZQUFZLEVBQUUsbUJBQW1CO0lBQ3ZDLElBQUksRUFBRSxlQUFlO0lBQ3JCLGNBQWMsRUFBRSxlQUFlO0lBQy9CLFdBQVcsRUFBRSxZQUFZO0lBQ3pCLE1BQU0sRUFBRSxtQkFBbUI7SUFDM0Isa0JBQWtCLEVBQUUsa0JBQWtCO0NBQ3pDLENBQUE7QUFjRCxTQUFTLGdCQUFnQixDQUNyQixNQUFtQyxFQUNuQyxFQUFFLEtBQUssRUFBRSxRQUFRLEtBQThDLEVBQUU7SUFFakUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUMxRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsT0FBTyxHQUFHLFdBQVcseUJBQXlCLENBQUE7SUFDbEQsQ0FBQztTQUFNLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbEIsT0FBTyxpQkFBaUIsQ0FBQTtJQUM1QixDQUFDO0lBRUQsT0FBTyxZQUFZLGNBQWMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFBO0FBQ2pFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsYUFBYSxDQUFDLFVBQWlDLEVBQUU7SUFDckUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdB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