Skip to content

Commit 3c3f229

Browse files
committed
Clean up test code
1 parent 7dd4646 commit 3c3f229

File tree

10 files changed

+105
-187
lines changed

10 files changed

+105
-187
lines changed

javascript/node/selenium-webdriver/lib/test/index.js

+70-69
Original file line numberDiff line numberDiff line change
@@ -21,58 +21,74 @@ var build = require('./build'),
2121
webdriver = require('../..'),
2222
flow = webdriver.promise.controlFlow(),
2323
_base = require('../../_base'),
24+
remote = require('../../remote'),
2425
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');
4727

4828

4929
/**
5030
* Browsers with native support.
51-
* @type {!Array.<string>}
31+
* @type {!Array.<webdriver.Browser>}
5232
*/
5333
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
5737
];
5838

5939

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+
6046
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+
6261
browsers = browsers.split(',');
6362
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.');
6669
}
6770

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;
7177
}
7278
}
7379

74-
throw Error('Unrecognized browser: ' + browser);
80+
if (!recognized && !permitUnknownBrowsers) {
81+
throw Error('Unrecognized browser: ' + browser);
82+
}
7583
});
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+
7692
return browsers;
7793
})();
7894

@@ -85,10 +101,7 @@ var browsersToTest = (function() {
85101
*/
86102
function browsers(currentBrowser, browsersToIgnore) {
87103
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;
92105
};
93106
}
94107

@@ -100,17 +113,14 @@ function browsers(currentBrowser, browsersToIgnore) {
100113
*/
101114
function TestEnvironment(browserName, server) {
102115
var name = browserName;
103-
if (name.lastIndexOf('remote.', 0) == 0) {
104-
name = name.substring('remote.'.length);
105-
}
106116

107117
var autoCreate = true;
108118
this.__defineGetter__(
109119
'autoCreateDriver', function() { return autoCreate; });
110120
this.__defineSetter__(
111121
'autoCreateDriver', function(auto) { autoCreate = auto; });
112122

113-
this.__defineGetter__('browser', function() { return name; });
123+
this.__defineGetter__('browser', function() { return browserName; });
114124

115125
var driver;
116126
this.__defineGetter__('driver', function() { return driver; });
@@ -121,13 +131,6 @@ function TestEnvironment(browserName, server) {
121131

122132
this.browsers = function(var_args) {
123133
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);
131134
return browsers(browserName, browsersToIgnore);
132135
};
133136

@@ -137,12 +140,14 @@ function TestEnvironment(browserName, server) {
137140
var realBuild = builder.build;
138141

139142
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]);
143145
if (server) {
144146
builder.usingServer(server.address());
147+
} else if (remoteUrl) {
148+
builder.usingServer(remoteUrl);
145149
}
150+
builder.disableEnvironmentOverrides();
146151
return driver = realBuild.call(builder);
147152
};
148153

@@ -194,29 +199,32 @@ function suite(fn, opt_options) {
194199
// Filter out browser specific tests when that browser is not currently
195200
// selected for testing.
196201
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;
202203
});
203204
} else {
204205
browsers = browsersToTest;
205206
}
206207

207208
try {
208209
browsers.forEach(function(browser) {
209-
210210
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+
211220
var serverToUse = null;
212221

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();
217225
}
226+
218227
testing.before(function() {
219-
// Starting the server may require a build, so disable timeouts.
220228
this.timeout(0);
221229
return seleniumServer.start(60 * 1000);
222230
});
@@ -249,12 +257,6 @@ function suite(fn, opt_options) {
249257
testing.before(fileserver.start);
250258
testing.after(fileserver.stop);
251259

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-
258260
// Server is only started if required for a specific config.
259261
testing.after(function() {
260262
if (seleniumServer) {
@@ -274,6 +276,5 @@ exports.beforeEach = testing.beforeEach;
274276
exports.it = testing.it;
275277
exports.ignore = testing.ignore;
276278

277-
exports.Browser = Browser;
278279
exports.Pages = fileserver.Pages;
279280
exports.whereIs = fileserver.whereIs;

javascript/node/selenium-webdriver/lib/test/seleniumserver.js

-83
This file was deleted.

javascript/node/selenium-webdriver/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
"xml2js": "0.4.4"
2828
},
2929
"devDependencies" : {
30-
"mocha" : "~1.10.0"
30+
"mocha" : ">= 1.21.x"
3131
},
3232
"scripts": {
33-
"test": "node_modules/.bin/mocha --harmony -t 600000 --recursive test"
33+
"test": "node_modules/.bin/mocha --harmony --no-timeouts --recursive test"
3434
}
3535
}

javascript/node/selenium-webdriver/test/cookie_test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var assert = require('assert'),
2020

2121
var test = require('../lib/test'),
2222
fileserver = require('../lib/test/fileserver'),
23-
Browser = test.Browser,
23+
Browser = require('..').Browser,
2424
Pages = test.Pages;
2525

2626

javascript/node/selenium-webdriver/test/element_finding_test.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717

1818
var fail = require('assert').fail;
1919

20-
var By = require('..').By,
20+
var Browser = require('..').Browser,
21+
By = require('..').By,
2122
error = require('..').error,
2223
until = require('..').until,
2324
test = require('../lib/test'),
2425
assert = require('../testing/assert'),
25-
Browser = test.Browser,
2626
Pages = test.Pages;
2727

2828

@@ -58,9 +58,9 @@ test.suite(function(env) {
5858
});
5959
});
6060

61-
test.ignore(browsers(Browser.ANDROID)).it(
62-
'should find multiple elements by ID even though that ' +
63-
'is malformed HTML',
61+
test.it(
62+
'should find multiple elements by ID even though that is ' +
63+
'malformed HTML',
6464
function() {
6565
driver.get(Pages.nestedPage);
6666
driver.findElements(By.id('2')).then(function(elements) {

0 commit comments

Comments
 (0)