mirror of
https://github.com/jquery/jquery.git
synced 2024-12-09 08:04:24 +00:00
6d78c0768d
While Edge in IE mode is not guaranteed to match IE 11 in every aspect, in practice it generally does. Testing in this mode in GitHub Actions will allow us to catch most IE-breaking issues at the PR level. This change also adds missing npm scripts: `test:chrome`, `test:edge` & `test:ie`. Closes gh-5540
98 lines
3.1 KiB
JavaScript
98 lines
3.1 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 IE from "selenium-webdriver/ie.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, url, verbose } ) {
|
|
const capabilities = Capabilities[ browserName ]();
|
|
|
|
// Support: IE 11+
|
|
// When those are set for IE, the process crashes with an error:
|
|
// "Unable to match capability set 0: goog:loggingPrefs is an unknown
|
|
// extension capability for IE".
|
|
if ( browserName !== "ie" ) {
|
|
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 );
|
|
}
|
|
|
|
const ieOptions = new IE.Options();
|
|
ieOptions.setEdgeChromium( true );
|
|
ieOptions.setEdgePath( "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe" );
|
|
|
|
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 )
|
|
.setIeOptions( ieOptions )
|
|
.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 } );
|
|
|
|
// Set the first URL for the browser
|
|
await driver.get( url );
|
|
|
|
return driver;
|
|
}
|