Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions bin/command.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ program
"If using BrowserStack, specify browsers using --browserstack. " +
"Choices: " + browsers.join( ", " ) + ". Defaults to Chrome."
)
.option(
"--safari-tp",
"Use Safari Technology Preview instead of regular Safari. " +
"Only works with --browser safari and cannot be used with --browserstack."
)
.option(
"-m, --middleware <middlewares...>",
"Add middleware to the test server by passing the path to a module that exports " +
Expand Down
6 changes: 5 additions & 1 deletion browsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ export async function createBrowserWorker( url, browser, options, restarts = 0 )
) }`
);
}
const { browserstack, debug, headless, reportId, runId, tunnelId, verbose } = options;
const {
browserstack, debug, headless, reportId, runId, safariTp, tunnelId, verbose
} = options;

while ( await maxWorkersReached( options ) ) {
if ( verbose ) {
console.log( "\nWaiting for available sessions..." );
Expand Down Expand Up @@ -90,6 +93,7 @@ export async function createBrowserWorker( url, browser, options, restarts = 0 )
const driver = await createDriver( {
browserName: browser.browser,
headless,
safariTp,
url,
verbose
} );
Expand Down
11 changes: 10 additions & 1 deletion lib/getBrowserString.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,19 @@ export function getBrowserString(
os,
os_version: osVersion
},
headless
{
headless = false,
safariTp = false
} = {}
) {
browser = browser.toLowerCase();
browser = browserMap[ browser ] || browser;

// Handle Safari Technology Preview
if ( safariTp && browser === "Safari" ) {
browser = "Safari Technology Preview";
}

let str = browser;
if ( browserVersion ) {
str += ` ${ browserVersion }`;
Expand Down
5 changes: 4 additions & 1 deletion queue.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,10 @@ export async function hardRetryTest( reportId, maxHardRetries ) {
export function addRun( url, browser, options ) {
queue.push( {
browser,
fullBrowser: getBrowserString( browser ),
fullBrowser: getBrowserString( browser, {
headless: options.headless,
safariTp: options.safariTp
} ),
hardRetries: 0,
id: options.reportId,
url,
Expand Down
9 changes: 8 additions & 1 deletion run.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export async function run( {
retries = 0,
run: runs = [],
runId,
safariTp,
testUrl: testUrls = [],
verbose
} ) {
Expand All @@ -45,6 +46,11 @@ export async function run( {
"Cannot run in headless mode and debug mode at the same time."
);
}
if ( safariTp && browserstack ) {
throw new Error(
"Cannot use --safari-tp with --browserstack."
);
}

// Ensure baseUrl ends with a slash
if ( !rendsWithSlash.test( baseUrl ) ) {
Expand Down Expand Up @@ -255,7 +261,7 @@ export async function run( {
}

function queueRun( browser, { run, testUrl } = {} ) {
const fullBrowser = getBrowserString( browser, headless );
const fullBrowser = getBrowserString( browser, { headless, safariTp } );
const reportId = generateHash(
`${ hashValue }-${ run }-${ testUrl }-${ fullBrowser }`
);
Expand Down Expand Up @@ -287,6 +293,7 @@ export async function run( {
headless,
run,
reportId,
safariTp,
testUrl,
tunnelId,
verbose
Expand Down
25 changes: 24 additions & 1 deletion selenium/createDriver.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,20 @@ 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 Safari from "selenium-webdriver/safari.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 } ) {
export default async function createDriver( {
browserName, url,
headless = false,
verbose = false,
safariTp = false
} ) {

const capabilities = Capabilities[ browserName ]();

// Support: IE 11+
Expand Down Expand Up @@ -55,6 +62,21 @@ export default async function createDriver( { browserName, headless, url, verbos
edgeOptions.setEdgeChromiumBinaryPath( process.env.EDGE_BIN );
}

const safariOptions = new Safari.Options();

// Use Safari Technology Preview if --safari-tp flag is provided
if ( safariTp ) {
if ( verbose ) {
console.log( "Using Safari Technology Preview" );
}
safariOptions.setTechnologyPreview( true );

// Without it, we're getting an error:
// SessionNotCreatedError: Could not create a session: Browser name does
// not match (requested: safari; available: Safari Technology Preview)
safariOptions.set( "browserName", "Safari Technology Preview" );
}

const ieOptions = new IE.Options();
ieOptions.setEdgeChromium( true );
ieOptions.setEdgePath( "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" );
Expand Down Expand Up @@ -96,6 +118,7 @@ export default async function createDriver( { browserName, headless, url, verbos
.setChromeOptions( chromeOptions )
.setFirefoxOptions( firefoxOptions )
.setEdgeOptions( edgeOptions )
.setSafariOptions( safariOptions )
.setIeOptions( ieOptions );

if ( ieService ) {
Expand Down