1
1
/*global window, Promise */
2
2
3
- var globby = require ( 'globby' ) ;
4
- var WebDriver = require ( 'selenium-webdriver' ) ;
5
- var chrome = require ( 'selenium-webdriver/chrome ' ) ;
6
- var chromedriver = require ( 'chromedriver' ) ;
3
+ const globby = require ( 'globby' ) ;
4
+ const chrome = require ( 'selenium-webdriver/chrome ' ) ;
5
+ const firefox = require ( 'selenium-webdriver/firefox ' ) ;
6
+ const chromedriver = require ( 'chromedriver' ) ;
7
7
8
- var args = process . argv . slice ( 2 ) ;
8
+ const args = process . argv . slice ( 2 ) ;
9
9
10
10
// allow running certain browsers through command line args
11
11
// (only one browser supported, run multiple times for more browsers)
12
- var browser = 'chrome' ;
12
+ let browser = 'chrome' ;
13
13
args . forEach ( function ( arg ) {
14
14
// pattern: browsers=Chrome
15
- var parts = arg . split ( '=' ) ;
15
+ const parts = arg . split ( '=' ) ;
16
16
if ( parts [ 0 ] === 'browser' ) {
17
17
browser = parts [ 1 ] . toLowerCase ( ) ;
18
18
}
@@ -25,7 +25,7 @@ function collectTestResults(driver) {
25
25
// inject a script that waits half a second
26
26
return driver
27
27
. executeAsyncScript ( function ( ) {
28
- var callback = arguments [ arguments . length - 1 ] ;
28
+ const callback = arguments [ arguments . length - 1 ] ;
29
29
setTimeout ( function ( ) {
30
30
if ( ! window . mocha ) {
31
31
callback ( 'mocha-missing;' + window . location . href ) ;
@@ -57,7 +57,7 @@ function collectTestResults(driver) {
57
57
* Test each URL
58
58
*/
59
59
function runTestUrls ( driver , isMobile , urls , errors ) {
60
- var url = urls . shift ( ) ;
60
+ const url = urls . shift ( ) ;
61
61
errors = errors || [ ] ;
62
62
63
63
return (
@@ -72,9 +72,9 @@ function runTestUrls(driver, isMobile, urls, errors) {
72
72
} )
73
73
// And process them
74
74
. then ( function ( promiseResults ) {
75
- var capabilities = promiseResults [ 0 ] ;
76
- var result = promiseResults [ 1 ] ;
77
- var browserName =
75
+ const capabilities = promiseResults [ 0 ] ;
76
+ const result = promiseResults [ 1 ] ;
77
+ const browserName =
78
78
capabilities . get ( 'browserName' ) +
79
79
( capabilities . get ( 'mobileEmulationEnabled' ) ? '-mobile' : '' ) ;
80
80
console . log ( url + ' [' + browserName + ']' ) ;
@@ -117,80 +117,45 @@ function runTestUrls(driver, isMobile, urls, errors) {
117
117
* Build web driver depends whether REMOTE_SELENIUM_URL is set
118
118
*/
119
119
function buildWebDriver ( browser ) {
120
-
121
- // https://github.com/SeleniumHQ/selenium/pull/10796/files#diff-6c87d95a2288e92e15a6bb17710c763c01c2290e679beb26220858f3218b6a62L260
122
-
123
- var capabilities ;
124
- var mobileBrowser = browser . split ( '-mobile' ) ;
125
-
126
- if ( mobileBrowser . length > 1 ) {
127
- browser = mobileBrowser [ 0 ] ;
128
- capabilities = {
129
- browserName : mobileBrowser [ 0 ] ,
130
- chromeOptions : {
131
- mobileEmulation : {
132
- deviceMetrics : {
133
- width : 320 ,
134
- height : 568 ,
135
- pixelRatio : 2
136
- }
137
- }
138
- }
139
- } ;
140
- }
120
+ let webdriver ;
121
+ const mobileBrowser = browser . split ( '-mobile' ) ;
141
122
142
123
// fix chrome DevToolsActivePort file doesn't exist in CricleCI (as well as a
143
124
// host of other problems with starting Chrome). the only thing that seems to
144
125
// allow Chrome to start without problems consistently is using ChromeHeadless
145
126
// @see https://stackoverflow.com/questions/50642308/webdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-t
146
127
if ( browser === 'chrome' ) {
147
- var service = new chrome . ServiceBuilder ( chromedriver . path ) . build ( ) ;
148
- chrome . setDefaultService ( service ) ;
128
+ const service = new chrome . ServiceBuilder ( chromedriver . path ) . build ( ) ;
149
129
150
- capabilities = WebDriver . Capabilities . chrome ( ) ;
151
- capabilities . set ( 'chromeOptions' , {
152
- args : [
130
+ const options = new chrome . Options ( )
131
+ . headless ( )
132
+ . addArguments ( [
153
133
'--no-sandbox' ,
154
- '--headless' ,
155
134
'--disable-extensions' ,
156
135
'--disable-dev-shm-usage'
157
- ]
158
- } ) ;
136
+ ] ) ;
137
+ webdriver = chrome . Driver . createSession ( options , service ) ;
138
+ } else if ( browser === 'firefox' ) {
139
+ const options = new firefox . Options ( ) . headless ( ) ;
140
+ webdriver = firefox . Driver . createSession ( options ) ;
159
141
}
160
142
161
- var webdriver = new WebDriver . Builder ( )
162
- . withCapabilities ( capabilities )
163
- . forBrowser ( browser ) ;
164
-
165
143
if ( process . env . REMOTE_SELENIUM_URL ) {
166
144
webdriver . usingServer ( process . env . REMOTE_SELENIUM_URL ) ;
167
145
}
168
146
169
- // @see https://github.com/SeleniumHQ/selenium/issues/6026
170
- if ( browser === 'safari' ) {
171
- var safari = require ( 'selenium-webdriver/safari' ) ;
172
- var server = new safari . ServiceBuilder ( )
173
- . addArguments ( '--legacy' )
174
- . build ( )
175
- . start ( ) ;
176
-
177
- webdriver . usingServer ( server ) ;
178
- }
179
-
180
147
return {
181
- driver : webdriver . build ( ) ,
148
+ driver : webdriver ,
182
149
isMobile : mobileBrowser . length > 1
183
150
} ;
184
151
}
185
152
186
153
function start ( options ) {
187
- var driver ;
188
- var isMobile = false ;
189
154
// yes, really, and this isn't documented anywhere either.
190
155
options . browser =
191
156
options . browser === 'edge' ? 'MicrosoftEdge' : options . browser ;
192
157
193
- var testUrls = globby
158
+ const testUrls = globby
194
159
. sync ( [
195
160
'test/integration/full/**/*.{html,xhtml}' ,
196
161
'!**/frames/**/*.{html,xhtml}'
@@ -214,17 +179,9 @@ function start(options) {
214
179
}
215
180
216
181
// try to load the browser
217
- try {
218
- var webDriver = buildWebDriver ( options . browser ) ;
219
- driver = webDriver . driver ;
220
- isMobile = webDriver . isMobile ;
221
- // If load fails, warn user and move to the next task
222
- } catch ( err ) {
223
- console . log ( ) ;
224
- console . log ( err . message ) ;
225
- console . log ( 'Aborted testing using ' + options . browser ) ;
226
- return process . exit ( ) ;
227
- }
182
+ const webDriver = buildWebDriver ( options . browser ) ;
183
+ const driver = webDriver . driver ;
184
+ const isMobile = webDriver . isMobile ;
228
185
229
186
driver . manage ( ) . setTimeouts ( {
230
187
pageLoad : 50000 ,
0 commit comments