integration/utils/DriverFactory.js (68 lines of code) (raw):
const { Builder } = require('selenium-webdriver');
const config = require('./config');
class DriverFactory {
configure(host) {
let builder = new Builder();
const sauceLabsURL = 'https://ondemand.saucelabs.com/wd/hub';
switch (host) {
case 'sauce-firefox':
builder.usingServer(sauceLabsURL);
builder.withCapabilities({
...config.firefoxOptions,
...config.sauceOptions,
});
break;
case 'sauce-chrome':
builder.usingServer(sauceLabsURL);
builder.withCapabilities({
...config.chromeOptions,
...config.sauceOptions,
});
break;
case 'sauce-safari':
builder.usingServer(sauceLabsURL);
builder.withCapabilities({
...config.safariOptions,
...config.sauceOptions,
});
break;
case 'firefox':
builder.forBrowser('firefox');
builder.withCapabilities(config.firefoxOptions);
break;
case 'chrome':
builder.forBrowser('chrome');
builder.withCapabilities(config.chromeOptions);
break;
case 'safari':
builder.forBrowser('safari');
builder.withCapabilities(config.safariOptions);
break;
default:
console.log(`Invalid host: ${host}, use local ChromeDriver instead.`);
builder.forBrowser('chrome');
builder.withCapabilities(config.chromeOptions);
break;
}
return builder;
}
async build(testName, host = config.host) {
this.host = host;
this.driver = await this.configure(host).build();
const { id_ } = await this.driver.getSession();
this.sessionId = id_;
this.driver.executeScript('sauce:job-name=' + testName);
}
async quit(testResult) {
if (this.host.startsWith('sauce')) {
this.driver.executeScript('sauce:job-result=' + testResult);
console.log(
'\x1b[33m%s\x1b[0m',
'See a video of the run at https://saucelabs.com/tests/' +
this.sessionId
);
}
await this.driver.quit();
}
}
module.exports = DriverFactory;