@@ -21,58 +21,74 @@ var build = require('./build'),
21
21
webdriver = require ( '../..' ) ,
22
22
flow = webdriver . promise . controlFlow ( ) ,
23
23
_base = require ( '../../_base' ) ,
24
+ remote = require ( '../../remote' ) ,
24
25
testing = require ( '../../testing' ) ,
25
- fileserver = require ( './fileserver' ) ,
26
- seleniumserver = require ( './seleniumserver' ) ;
27
-
28
-
29
- var Browser = {
30
- ANDROID : 'android' ,
31
- CHROME : 'chrome' ,
32
- IE : 'internet explorer' ,
33
- // Shorthand for IPAD && IPHONE when using the browsers predciate.
34
- IOS : 'iOS' ,
35
- IPAD : 'iPad' ,
36
- IPHONE : 'iPhone' ,
37
- FIREFOX : 'firefox' ,
38
- OPERA : 'opera' ,
39
- PHANTOMJS : 'phantomjs' ,
40
- SAFARI : 'safari' ,
41
-
42
- // Browsers that should always be tested via the java Selenium server.
43
- REMOTE_CHROME : 'remote.chrome' ,
44
- REMOTE_FIREFOX : 'remote.firefox' ,
45
- REMOTE_PHANTOMJS : 'remote.phantomjs'
46
- } ;
26
+ fileserver = require ( './fileserver' ) ;
47
27
48
28
49
29
/**
50
30
* Browsers with native support.
51
- * @type {!Array.<string > }
31
+ * @type {!Array.<webdriver.Browser > }
52
32
*/
53
33
var NATIVE_BROWSERS = [
54
- Browser . CHROME ,
55
- Browser . FIREFOX ,
56
- Browser . PHANTOMJS
34
+ webdriver . Browser . CHROME ,
35
+ webdriver . Browser . FIREFOX ,
36
+ webdriver . Browser . PHANTOM_JS
57
37
] ;
58
38
59
39
40
+ var serverJar = process . env [ 'SELENIUM_SERVER_JAR' ] ;
41
+ var remoteUrl = process . env [ 'SELENIUM_REMOTE_URL' ] ;
42
+ var startServer = ! ! serverJar && ! remoteUrl ;
43
+ var nativeRun = ! serverJar && ! remoteUrl ;
44
+
45
+
60
46
var browsersToTest = ( function ( ) {
61
- var browsers = process . env [ 'SELENIUM_BROWSERS' ] || Browser . FIREFOX ;
47
+ if ( process . env [ 'SELENIUM_BROWSER' ] ) {
48
+ if ( process . env [ 'SELENIUM_BROWSERS' ] ) {
49
+ console . log ( 'SELENIUM_BROWSER and SELENIUM_BROWSERS both set for' ) ;
50
+ console . log ( 'Selenium test suite; unsetting SELENIUM_BROWSER' ) ;
51
+ } else {
52
+ process . env [ 'SELENIUM_BROWSERS' ] = process . env [ 'SELENIUM_BROWSER' ] ;
53
+ }
54
+ delete process . env [ 'SELENIUM_BROWSER' ] ;
55
+ }
56
+
57
+ var permitRemoteBrowsers = ! ! remoteUrl || ! ! serverJar ;
58
+ var permitUnknownBrowsers = ! nativeRun ;
59
+ var browsers = process . env [ 'SELENIUM_BROWSERS' ] || webdriver . Browser . FIREFOX ;
60
+
62
61
browsers = browsers . split ( ',' ) ;
63
62
browsers . forEach ( function ( browser ) {
64
- if ( browser === Browser . IOS ) {
65
- throw Error ( 'Invalid browser name: ' + browser ) ;
63
+ var parts = browser . split ( / : / , 3 ) ;
64
+
65
+ if ( NATIVE_BROWSERS . indexOf ( parts [ 0 ] ) == - 1 && ! permitRemoteBrowsers ) {
66
+ throw Error ( 'Browser ' + parts [ 0 ] + ' requires a WebDriver server and ' +
67
+ 'neither the SELENIUM_REMOTE_URL nor the SELENIUM_SERVER_JAR ' +
68
+ 'environment variables have been set.' ) ;
66
69
}
67
70
68
- for ( var name in Browser ) {
69
- if ( Browser . hasOwnProperty ( name ) && Browser [ name ] === browser ) {
70
- return ;
71
+ var recognized = false ;
72
+ for ( var prop in webdriver . Browser ) {
73
+ if ( webdriver . Browser . hasOwnProperty ( prop ) &&
74
+ webdriver . Browser [ prop ] === parts [ 0 ] ) {
75
+ recognized = true ;
76
+ break ;
71
77
}
72
78
}
73
79
74
- throw Error ( 'Unrecognized browser: ' + browser ) ;
80
+ if ( ! recognized && ! permitUnknownBrowsers ) {
81
+ throw Error ( 'Unrecognized browser: ' + browser ) ;
82
+ }
75
83
} ) ;
84
+
85
+ console . log ( 'Running tests against [' + browsers . join ( ',' ) + ']' ) ;
86
+ if ( remoteUrl ) {
87
+ console . log ( 'Using remote server ' + remoteUrl ) ;
88
+ } else if ( serverJar ) {
89
+ console . log ( 'Using standalone Selenium server ' + serverJar ) ;
90
+ }
91
+
76
92
return browsers ;
77
93
} ) ( ) ;
78
94
@@ -85,10 +101,7 @@ var browsersToTest = (function() {
85
101
*/
86
102
function browsers ( currentBrowser , browsersToIgnore ) {
87
103
return function ( ) {
88
- var checkIos =
89
- currentBrowser === Browser . IPAD || currentBrowser === Browser . IPHONE ;
90
- return browsersToIgnore . indexOf ( currentBrowser ) != - 1 ||
91
- ( checkIos && browsersToIgnore . indexOf ( Browser . IOS ) != - 1 ) ;
104
+ return browsersToIgnore . indexOf ( currentBrowser ) != - 1 ;
92
105
} ;
93
106
}
94
107
@@ -100,17 +113,14 @@ function browsers(currentBrowser, browsersToIgnore) {
100
113
*/
101
114
function TestEnvironment ( browserName , server ) {
102
115
var name = browserName ;
103
- if ( name . lastIndexOf ( 'remote.' , 0 ) == 0 ) {
104
- name = name . substring ( 'remote.' . length ) ;
105
- }
106
116
107
117
var autoCreate = true ;
108
118
this . __defineGetter__ (
109
119
'autoCreateDriver' , function ( ) { return autoCreate ; } ) ;
110
120
this . __defineSetter__ (
111
121
'autoCreateDriver' , function ( auto ) { autoCreate = auto ; } ) ;
112
122
113
- this . __defineGetter__ ( 'browser' , function ( ) { return name ; } ) ;
123
+ this . __defineGetter__ ( 'browser' , function ( ) { return browserName ; } ) ;
114
124
115
125
var driver ;
116
126
this . __defineGetter__ ( 'driver' , function ( ) { return driver ; } ) ;
@@ -121,13 +131,6 @@ function TestEnvironment(browserName, server) {
121
131
122
132
this . browsers = function ( var_args ) {
123
133
var browsersToIgnore = Array . prototype . slice . apply ( arguments , [ 0 ] ) ;
124
- var remoteVariants = [ ] ;
125
- browsersToIgnore . forEach ( function ( browser ) {
126
- if ( browser . lastIndexOf ( 'remote.' , 0 ) === 0 ) {
127
- remoteVariants . push ( browser . substring ( 'remote.' . length ) ) ;
128
- }
129
- } ) ;
130
- browsersToIgnore = browsersToIgnore . concat ( remoteVariants ) ;
131
134
return browsers ( browserName , browsersToIgnore ) ;
132
135
} ;
133
136
@@ -137,12 +140,14 @@ function TestEnvironment(browserName, server) {
137
140
var realBuild = builder . build ;
138
141
139
142
builder . build = function ( ) {
140
- builder . getCapabilities ( ) .
141
- set ( webdriver . Capability . BROWSER_NAME , name ) ;
142
-
143
+ var parts = browserName . split ( / : / , 3 ) ;
144
+ builder . forBrowser ( parts [ 0 ] , parts [ 1 ] , parts [ 2 ] ) ;
143
145
if ( server ) {
144
146
builder . usingServer ( server . address ( ) ) ;
147
+ } else if ( remoteUrl ) {
148
+ builder . usingServer ( remoteUrl ) ;
145
149
}
150
+ builder . disableEnvironmentOverrides ( ) ;
146
151
return driver = realBuild . call ( builder ) ;
147
152
} ;
148
153
@@ -194,29 +199,32 @@ function suite(fn, opt_options) {
194
199
// Filter out browser specific tests when that browser is not currently
195
200
// selected for testing.
196
201
browsers = browsers . filter ( function ( browser ) {
197
- if ( browsersToTest . indexOf ( browser ) != - 1 ) {
198
- return true ;
199
- }
200
- return browsersToTest . indexOf (
201
- browser . substring ( 'remote.' . length ) ) != - 1 ;
202
+ return browsersToTest . indexOf ( browser ) != - 1 ;
202
203
} ) ;
203
204
} else {
204
205
browsers = browsersToTest ;
205
206
}
206
207
207
208
try {
208
209
browsers . forEach ( function ( browser ) {
209
-
210
210
testing . describe ( '[' + browser + ']' , function ( ) {
211
+
212
+ if ( _base . isDevMode ( ) && nativeRun &&
213
+ browser === webdriver . Browser . FIREFOX ) {
214
+ testing . before ( function ( ) {
215
+ return build . of ( '//javascript/firefox-driver:webdriver' )
216
+ . onlyOnce ( ) . go ( ) ;
217
+ } ) ;
218
+ }
219
+
211
220
var serverToUse = null ;
212
221
213
- if ( NATIVE_BROWSERS . indexOf ( browser ) == - 1 ) {
214
- serverToUse = seleniumServer ;
215
- if ( ! serverToUse ) {
216
- serverToUse = seleniumServer = new seleniumserver . Server ( ) ;
222
+ if ( ! ! serverJar && ! remoteUrl ) {
223
+ if ( ! ( serverToUse = seleniumServer ) ) {
224
+ serverToUse = seleniumServer = new remote . SeleniumServer ( ) ;
217
225
}
226
+
218
227
testing . before ( function ( ) {
219
- // Starting the server may require a build, so disable timeouts.
220
228
this . timeout ( 0 ) ;
221
229
return seleniumServer . start ( 60 * 1000 ) ;
222
230
} ) ;
@@ -249,12 +257,6 @@ function suite(fn, opt_options) {
249
257
testing . before ( fileserver . start ) ;
250
258
testing . after ( fileserver . stop ) ;
251
259
252
- if ( _base . isDevMode ( ) && browsersToTest . indexOf ( Browser . FIREFOX ) != - 1 ) {
253
- testing . before ( function ( ) {
254
- return build . of ( '//javascript/firefox-driver:webdriver' ) . onlyOnce ( ) . go ( ) ;
255
- } ) ;
256
- }
257
-
258
260
// Server is only started if required for a specific config.
259
261
testing . after ( function ( ) {
260
262
if ( seleniumServer ) {
@@ -274,6 +276,5 @@ exports.beforeEach = testing.beforeEach;
274
276
exports . it = testing . it ;
275
277
exports . ignore = testing . ignore ;
276
278
277
- exports . Browser = Browser ;
278
279
exports . Pages = fileserver . Pages ;
279
280
exports . whereIs = fileserver . whereIs ;
0 commit comments