@@ -2,13 +2,20 @@ import { Builder, Capabilities, logging } from "selenium-webdriver";
22import Chrome from "selenium-webdriver/chrome.js" ;
33import Edge from "selenium-webdriver/edge.js" ;
44import Firefox from "selenium-webdriver/firefox.js" ;
5+ import Safari from "selenium-webdriver/safari.js" ;
56import IE from "selenium-webdriver/ie.js" ;
67import { browserSupportsHeadless } from "../lib/getBrowserString.js" ;
78
89// Set script timeout to 10min
910const DRIVER_SCRIPT_TIMEOUT = 1000 * 60 * 10 ;
1011
11- export default async function createDriver ( { browserName, headless, url, verbose } ) {
12+ export default async function createDriver ( {
13+ browserName, url,
14+ headless = false ,
15+ verbose = false ,
16+ safariTp = false
17+ } ) {
18+
1219 const capabilities = Capabilities [ browserName ] ( ) ;
1320
1421 // Support: IE 11+
@@ -55,6 +62,21 @@ export default async function createDriver( { browserName, headless, url, verbos
5562 edgeOptions . setEdgeChromiumBinaryPath ( process . env . EDGE_BIN ) ;
5663 }
5764
65+ const safariOptions = new Safari . Options ( ) ;
66+
67+ // Use Safari Technology Preview if --safari-tp flag is provided
68+ if ( safariTp ) {
69+ if ( verbose ) {
70+ console . log ( "Using Safari Technology Preview" ) ;
71+ }
72+ safariOptions . setTechnologyPreview ( true ) ;
73+
74+ // Without it, we're getting an error:
75+ // SessionNotCreatedError: Could not create a session: Browser name does
76+ // not match (requested: safari; available: Safari Technology Preview)
77+ safariOptions . set ( "browserName" , "Safari Technology Preview" ) ;
78+ }
79+
5880 const ieOptions = new IE . Options ( ) ;
5981 ieOptions . setEdgeChromium ( true ) ;
6082 ieOptions . setEdgePath ( "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" ) ;
@@ -96,6 +118,7 @@ export default async function createDriver( { browserName, headless, url, verbos
96118 . setChromeOptions ( chromeOptions )
97119 . setFirefoxOptions ( firefoxOptions )
98120 . setEdgeOptions ( edgeOptions )
121+ . setSafariOptions ( safariOptions )
99122 . setIeOptions ( ieOptions ) ;
100123
101124 if ( ieService ) {
0 commit comments