nodium
Version:
Pure nodejs selenium webdriver functional helpers
102 lines (88 loc) • 3.19 kB
JavaScript
import { Browser } from 'selenium-webdriver';
import getLocalDriver from './local';
import getSauceLabsDriver from './saucelabs';
import getBrowserstackDriver from './browserstack';
const debug = require('debug')('nodium');
let driver;
if (process.env.BROWSERSTACK) {
const capabilities = {};
const browser = {
name: process.env.SELENIUM_BROWSER || 'chrome',
platform: process.env.BROWSERSTACK_PLATFORM || 'Windows',
resolution: process.env.BROWSERSTACK_RESOLUTION || '1280x1024',
};
if (process.env.BROWSERSTACK_PLATFORM_VERSION) {
browser.platformVersion = process.env.BROWSERSTACK_PLATFORM_VERSION;
}
if (process.env.BROWSERSTACK_VERSION) {
browser.version = process.env.BROWSERSTACK_VERSION;
}
if (process.env.BROWSERSTACK_SELENIUM_VERSION) {
capabilities['browserstack.selenium_version'] =
process.env.BROWSERSTACK_SELENIUM_VERSION;
}
const username =
process.env.BROWSERSTACK_USER || process.env.BROWSERSTACK_USERNAME;
const accessKey = process.env.BROWSERSTACK_ACCESS_KEY;
const parentModule = module.parent || module;
require('pkginfo')(parentModule, 'name');
const {
exports: { name: project },
} = parentModule;
driver = getBrowserstackDriver(
username,
accessKey,
browser,
project,
'local',
'local',
capabilities
);
debug(`Use ${browser.name.toLowerCase()} browser`);
} else if (process.env.SAUCE) {
const browser = {
name: process.env.SELENIUM_BROWSER || 'chrome',
platform: process.env.SAUCE_PLATFORM || 'Windows 10',
resolution: process.env.SAUCE_RESOLUTION || '1280x1024',
};
if (process.env.SAUCE_VERSION) {
browser.version = process.env.SAUCE_VERSION;
} else {
switch (browser.name.toLowerCase()) {
case Browser.CHROME:
browser.version = '69';
break;
case Browser.FIREFOX:
browser.version = '62';
break;
default:
throw new Error(
`Cannot set default version for browser ${browser.name}`
);
}
}
const username = process.env.SAUCE_USERNAME;
const accessKey = process.env.SAUCE_ACCESS_KEY;
const parentModule = module.parent || module;
require('pkginfo')(parentModule, 'name');
const {
exports: { name: projectName },
} = parentModule;
driver = getSauceLabsDriver(username, accessKey, browser, projectName);
debug(`Use ${browser.name.toLowerCase()} browser`);
} else {
const binaryPath = process.env.SELENIUM_BROWSER_BINARY_PATH;
if (!binaryPath) {
throw new Error(
`You must provide a browser binary path using "SELENIUM_BROWSER_BINARY_PATH" env var.`
);
}
const browser = process.env.SELENIUM_BROWSER || Browser.FIREFOX;
const options = {
binaryPath,
verbose: !!process.env.VERBOSE_MODE,
};
driver = getLocalDriver(browser.toLowerCase(), options);
debug(`Use ${browser.toLowerCase()} browser`);
}
export default driver;