@@ -121,6 +121,7 @@ const zip = require('./io/zip')
121
121
const { Browser, Capabilities, Capability } = require ( './lib/capabilities' )
122
122
const { Zip } = require ( './io/zip' )
123
123
const { getBinaryPaths } = require ( './common/driverFinder' )
124
+ const { findFreePort } = require ( './net/portprober' )
124
125
const FIREFOX_CAPABILITY_KEY = 'moz:firefoxOptions'
125
126
126
127
/**
@@ -505,6 +506,31 @@ class ServiceBuilder extends remote.DriverService.Builder {
505
506
enableVerboseLogging ( opt_trace ) {
506
507
return this . addArguments ( opt_trace ? '-vv' : '-v' )
507
508
}
509
+
510
+ /**
511
+ * Overrides the parent build() method to add the websocket port argument
512
+ * for Firefox when not connecting to an existing instance.
513
+ *
514
+ * @return {!DriverService } A new driver service instance.
515
+ */
516
+ build ( ) {
517
+ let port = this . options_ . port || findFreePort ( ) ;
518
+ let argsPromise = Promise . resolve ( port ) . then ( ( port ) => {
519
+ // Start with the default --port argument.
520
+ let args = this . options_ . args . concat ( `--port=${ port } ` ) ;
521
+ // If the "--connect-existing" flag is not set, add the websocket port.
522
+ if ( ! this . options_ . args . some ( arg => arg === '--connect-existing' ) ) {
523
+ return findFreePort ( ) . then ( wsPort => {
524
+ args . push ( `--websocket-port=${ wsPort } ` ) ;
525
+ return args ;
526
+ } ) ;
527
+ }
528
+ return args ;
529
+ } ) ;
530
+
531
+ let options = Object . assign ( { } , this . options_ , { args : argsPromise , port } ) ;
532
+ return new remote . DriverService ( this . exe_ , options ) ;
533
+ }
508
534
}
509
535
510
536
/**
0 commit comments