mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
95a4c94b81
- reuse BrowserStack workers. - add support for "latest" and "latest-1" in browser version filters - add support for specifying non-final browser versions, such as beta versions - more accurate eslint for files in test/runner - switched `--no-isolate` command flag to `--isolate`. Now that browser instances are shared, it made more sense to me to default to no isolation unless specified. This turned out to be cleaner because the only place we isolate is in browserstack.yml. - fixed an issue with retries where it wasn't always waiting for the retried test run - enable strict mode in test yargs command
82 lines
2.6 KiB
JavaScript
82 lines
2.6 KiB
JavaScript
import { Builder, Capabilities, logging } from "selenium-webdriver";
|
|
import Chrome from "selenium-webdriver/chrome.js";
|
|
import Edge from "selenium-webdriver/edge.js";
|
|
import Firefox from "selenium-webdriver/firefox.js";
|
|
import { browserSupportsHeadless } from "../lib/getBrowserString.js";
|
|
|
|
// Set script timeout to 10min
|
|
const DRIVER_SCRIPT_TIMEOUT = 1000 * 60 * 10;
|
|
|
|
export default async function createDriver( { browserName, headless, verbose } ) {
|
|
const capabilities = Capabilities[ browserName ]();
|
|
const prefs = new logging.Preferences();
|
|
prefs.setLevel( logging.Type.BROWSER, logging.Level.ALL );
|
|
capabilities.setLoggingPrefs( prefs );
|
|
|
|
let driver = new Builder().withCapabilities( capabilities );
|
|
|
|
const chromeOptions = new Chrome.Options();
|
|
chromeOptions.addArguments( "--enable-chrome-browser-cloud-management" );
|
|
|
|
// Alter the chrome binary path if
|
|
// the CHROME_BIN environment variable is set
|
|
if ( process.env.CHROME_BIN ) {
|
|
if ( verbose ) {
|
|
console.log( `Setting chrome binary to ${ process.env.CHROME_BIN }` );
|
|
}
|
|
chromeOptions.setChromeBinaryPath( process.env.CHROME_BIN );
|
|
}
|
|
|
|
const firefoxOptions = new Firefox.Options();
|
|
|
|
if ( process.env.FIREFOX_BIN ) {
|
|
if ( verbose ) {
|
|
console.log( `Setting firefox binary to ${ process.env.FIREFOX_BIN }` );
|
|
}
|
|
|
|
firefoxOptions.setBinary( process.env.FIREFOX_BIN );
|
|
}
|
|
|
|
const edgeOptions = new Edge.Options();
|
|
edgeOptions.addArguments( "--enable-chrome-browser-cloud-management" );
|
|
|
|
// Alter the edge binary path if
|
|
// the EDGE_BIN environment variable is set
|
|
if ( process.env.EDGE_BIN ) {
|
|
if ( verbose ) {
|
|
console.log( `Setting edge binary to ${ process.env.EDGE_BIN }` );
|
|
}
|
|
edgeOptions.setEdgeChromiumBinaryPath( process.env.EDGE_BIN );
|
|
}
|
|
|
|
if ( headless ) {
|
|
chromeOptions.addArguments( "--headless=new" );
|
|
firefoxOptions.addArguments( "--headless" );
|
|
edgeOptions.addArguments( "--headless=new" );
|
|
if ( !browserSupportsHeadless( browserName ) ) {
|
|
console.log(
|
|
`Headless mode is not supported for ${ browserName }.` +
|
|
"Running in normal mode instead."
|
|
);
|
|
}
|
|
}
|
|
|
|
driver = await driver
|
|
.setChromeOptions( chromeOptions )
|
|
.setFirefoxOptions( firefoxOptions )
|
|
.setEdgeOptions( edgeOptions )
|
|
.build();
|
|
|
|
if ( verbose ) {
|
|
const driverCapabilities = await driver.getCapabilities();
|
|
const name = driverCapabilities.getBrowserName();
|
|
const version = driverCapabilities.getBrowserVersion();
|
|
console.log( `\nDriver created for ${ name } ${ version }` );
|
|
}
|
|
|
|
// Increase script timeout to 10min
|
|
await driver.manage().setTimeouts( { script: DRIVER_SCRIPT_TIMEOUT } );
|
|
|
|
return driver;
|
|
}
|