selenium-webdriver 3.3.0 → 4.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +273 -0
- package/NOTICE +1 -1
- package/README.md +28 -36
- package/chrome.js +221 -146
- package/edge.js +43 -118
- package/example/chrome_android.js +8 -9
- package/example/chrome_mobile_emulation.js +9 -10
- package/example/firefox_channels.js +23 -19
- package/example/google_search.js +3 -3
- package/example/google_search_test.js +39 -27
- package/example/headless.js +55 -0
- package/example/logging.js +40 -7
- package/firefox.js +769 -0
- package/http/index.js +41 -4
- package/http/util.js +11 -6
- package/ie.js +57 -98
- package/index.js +182 -115
- package/io/index.js +59 -0
- package/io/zip.js +214 -0
- package/jasmine.json +11 -0
- package/lib/actions.js +68 -63
- package/lib/atoms/get-attribute.js +9 -0
- package/lib/atoms/is-displayed.js +73 -78
- package/lib/by.js +9 -1
- package/lib/capabilities.js +303 -201
- package/lib/command.js +28 -50
- package/lib/error.js +113 -42
- package/lib/http.js +167 -135
- package/lib/input.js +1044 -8
- package/lib/promise.js +222 -3331
- package/lib/proxy.js +134 -39
- package/lib/test/bootstrap_jasmine.js +28 -0
- package/lib/test/data/actions/click.html +24 -0
- package/lib/test/data/actions/drag.html +77 -0
- package/lib/test/data/actions/record_click.html +21 -0
- package/lib/test/data/chrome/download.html +2 -0
- package/lib/test/data/click_tests/disabled_element.html +12 -0
- package/lib/test/data/content-editable.html +10 -0
- package/lib/test/data/firefox/webextension.xpi +0 -0
- package/lib/test/data/inputs.html +42 -0
- package/lib/test/data/key_logger.html +34 -0
- package/lib/test/data/nestedElements.html +10 -1
- package/lib/test/data/scrolling_tests/page_with_partially_hidden_element.html +14 -0
- package/lib/test/data/selectPage.html +12 -0
- package/lib/test/data/simpleTest.html +5 -0
- package/lib/test/data/single_text_input.html +12 -0
- package/lib/test/data/upload_invisible.html +45 -0
- package/lib/test/fileserver.js +23 -19
- package/lib/test/index.js +30 -244
- package/lib/test/resources.js +0 -1
- package/lib/webdriver.js +770 -939
- package/net/index.js +21 -25
- package/net/portprober.js +51 -68
- package/package.json +6 -4
- package/remote/index.js +18 -30
- package/safari.js +42 -129
- package/test/actions_test.js +173 -18
- package/test/builder_test.js +106 -0
- package/test/chrome/devtools_test.js +93 -0
- package/test/chrome/options_test.js +48 -154
- package/test/chrome/service_test.js +7 -7
- package/test/cookie_test.js +77 -63
- package/test/element_finding_test.js +206 -201
- package/test/execute_script_test.js +115 -114
- package/test/fingerprint_test.js +16 -15
- package/test/firefox_test.js +251 -0
- package/test/http/http_test.js +18 -1
- package/test/http/util_test.js +2 -2
- package/test/{io_test.js → io/io_test.js} +40 -1
- package/test/io/zip_test.js +127 -0
- package/test/lib/by_test.js +21 -0
- package/test/lib/error_test.js +55 -8
- package/test/lib/http_test.js +18 -130
- package/test/lib/input_test.js +1379 -0
- package/test/lib/promise_test.js +473 -908
- package/test/lib/webdriver_test.js +357 -825
- package/test/logging_test.js +37 -43
- package/test/page_loading_test.js +70 -86
- package/test/proxy_test.js +64 -72
- package/test/rect_test.js +14 -25
- package/test/remote_test.js +13 -32
- package/test/safari_test.js +7 -71
- package/test/stale_element_test.js +20 -23
- package/test/tag_name_test.js +10 -9
- package/test/upload_test.js +27 -35
- package/test/window_test.js +72 -85
- package/testing/index.js +386 -315
- package/.npmignore +0 -2
- package/example/async_await_test.js +0 -68
- package/example/google_search_generator.js +0 -50
- package/example/parallel_flows.js +0 -54
- package/firefox/binary.js +0 -344
- package/firefox/extension.js +0 -187
- package/firefox/index.js +0 -722
- package/firefox/profile.js +0 -430
- package/lib/atoms/getAttribute.js +0 -12
- package/lib/events.js +0 -210
- package/lib/firefox/webdriver.json +0 -70
- package/lib/firefox/webdriver.xpi +0 -0
- package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
- package/lib/test/data/firefox/sample.xpi +0 -0
- package/lib/test/promise.js +0 -79
- package/opera.js +0 -405
- package/phantomjs.js +0 -282
- package/test/firefox/extension_test.js +0 -96
- package/test/firefox/firefox_test.js +0 -226
- package/test/firefox/profile_test.js +0 -185
- package/test/lib/events_test.js +0 -177
- package/test/lib/promise_aplus_test.js +0 -78
- package/test/lib/promise_error_test.js +0 -884
- package/test/lib/promise_flow_test.js +0 -2288
- package/test/lib/promise_generator_test.js +0 -310
- package/test/phantomjs/execute_phantomjs_test.js +0 -59
- package/test/session_test.js +0 -54
- package/test/testing/assert_test.js +0 -373
- package/test/testing/index_test.js +0 -224
- package/testing/assert.js +0 -378
package/lib/test/fileserver.js
CHANGED
|
@@ -17,26 +17,28 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
const fs = require('fs');
|
|
21
|
+
const http = require('http');
|
|
22
|
+
const path = require('path');
|
|
23
|
+
const url = require('url');
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const express = require('express');
|
|
26
|
+
const multer = require('multer');
|
|
27
|
+
const serveIndex = require('serve-index');
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const isDevMode = require('../devmode');
|
|
30
|
+
const resources = require('./resources');
|
|
31
|
+
const {Server} = require('./httpserver');
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
const WEB_ROOT = '/common';
|
|
34
|
+
const DATA_ROOT = '/data';
|
|
35
|
+
const JS_ROOT = '/javascript';
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
const baseDirectory = resources.locate(isDevMode ? 'common/src/web' : '.');
|
|
38
|
+
const dataDirectory = path.join(__dirname, 'data');
|
|
39
|
+
const jsDirectory = resources.locate(isDevMode ? 'javascript' : '..');
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
const Pages = (function() {
|
|
40
42
|
var pages = {};
|
|
41
43
|
function addPage(page, path) {
|
|
42
44
|
pages.__defineGetter__(page, function() {
|
|
@@ -105,7 +107,7 @@ var Pages = (function() {
|
|
|
105
107
|
})();
|
|
106
108
|
|
|
107
109
|
|
|
108
|
-
|
|
110
|
+
const Path = {
|
|
109
111
|
BASIC_AUTH: WEB_ROOT + '/basicAuth',
|
|
110
112
|
ECHO: WEB_ROOT + '/echo',
|
|
111
113
|
GENERATED: WEB_ROOT + '/generated',
|
|
@@ -126,6 +128,7 @@ app.get('/', sendIndex)
|
|
|
126
128
|
.use(JS_ROOT, serveIndex(jsDirectory), express.static(jsDirectory))
|
|
127
129
|
.post(Path.UPLOAD, handleUpload)
|
|
128
130
|
.use(WEB_ROOT, serveIndex(baseDirectory), express.static(baseDirectory))
|
|
131
|
+
.use(DATA_ROOT, serveIndex(dataDirectory), express.static(dataDirectory))
|
|
129
132
|
.get(Path.ECHO, sendEcho)
|
|
130
133
|
.get(Path.PAGE, sendInifinitePage)
|
|
131
134
|
.get(Path.PAGE + '/*', sendInifinitePage)
|
|
@@ -250,7 +253,8 @@ function sendIndex(request, response) {
|
|
|
250
253
|
}
|
|
251
254
|
|
|
252
255
|
var data = ['<!DOCTYPE html><h1>/</h1><hr/><ul>',
|
|
253
|
-
createListEntry('common')
|
|
256
|
+
createListEntry('common'),
|
|
257
|
+
createListEntry('data')];
|
|
254
258
|
if (isDevMode) {
|
|
255
259
|
data.push(createListEntry('javascript'));
|
|
256
260
|
}
|
|
@@ -305,9 +309,9 @@ exports.url = server.url.bind(server);
|
|
|
305
309
|
exports.whereIs = function(filePath) {
|
|
306
310
|
filePath = filePath.replace(/\\/g, '/');
|
|
307
311
|
if (!filePath.startsWith('/')) {
|
|
308
|
-
filePath =
|
|
312
|
+
filePath = `${WEB_ROOT}/${filePath}`;
|
|
309
313
|
}
|
|
310
|
-
return server.url(
|
|
314
|
+
return server.url(filePath);
|
|
311
315
|
};
|
|
312
316
|
|
|
313
317
|
|
package/lib/test/index.js
CHANGED
|
@@ -17,264 +17,55 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const assert = require('assert');
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
fileserver = require('./fileserver');
|
|
22
|
+
const build = require('./build');
|
|
23
|
+
const fileserver = require('./fileserver');
|
|
24
|
+
const firefox = require('../../firefox');
|
|
25
|
+
const isDevMode = require('../devmode');
|
|
26
|
+
const logging = require('../../lib/logging');
|
|
27
|
+
const remote = require('../../remote');
|
|
28
|
+
const safari = require('../../safari');
|
|
29
|
+
const testing = require('../../testing');
|
|
30
|
+
const webdriver = require('../../');
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
const LEGACY_FIREFOX = 'legacy-' + webdriver.Browser.FIREFOX;
|
|
32
|
+
const NO_BUILD = /^1|true$/i.test(process.env['SELENIUM_NO_BUILD']);
|
|
35
33
|
|
|
36
34
|
|
|
37
35
|
/**
|
|
38
|
-
*
|
|
39
|
-
* @
|
|
36
|
+
* @param {function(!testing.Environment)} fn The top level suite function.
|
|
37
|
+
* @param {testing.SuiteOptions=} options Suite specific options.
|
|
40
38
|
*/
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
webdriver.Browser.EDGE,
|
|
44
|
-
webdriver.Browser.FIREFOX,
|
|
45
|
-
LEGACY_FIREFOX,
|
|
46
|
-
webdriver.Browser.IE,
|
|
47
|
-
webdriver.Browser.OPERA,
|
|
48
|
-
webdriver.Browser.PHANTOM_JS,
|
|
49
|
-
webdriver.Browser.SAFARI
|
|
50
|
-
];
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
var serverJar = process.env['SELENIUM_SERVER_JAR'];
|
|
54
|
-
var remoteUrl = process.env['SELENIUM_REMOTE_URL'];
|
|
55
|
-
var useLoopback = process.env['SELENIUM_USE_LOOP_BACK'] == '1';
|
|
56
|
-
var noMarionette = /^0|false$/i.test(process.env['SELENIUM_GECKODRIVER']);
|
|
57
|
-
var startServer = !!serverJar && !remoteUrl;
|
|
58
|
-
var nativeRun = !serverJar && !remoteUrl;
|
|
59
|
-
|
|
60
|
-
if (/^1|true$/i.test(process.env['SELENIUM_VERBOSE'])) {
|
|
61
|
-
logging.installConsoleHandler();
|
|
62
|
-
logging.getLogger('webdriver.http').setLevel(logging.Level.ALL);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
var browsersToTest = (function() {
|
|
66
|
-
var permitRemoteBrowsers = !!remoteUrl || !!serverJar;
|
|
67
|
-
var permitUnknownBrowsers = !nativeRun;
|
|
68
|
-
var browsers = process.env['SELENIUM_BROWSER'] || webdriver.Browser.FIREFOX;
|
|
69
|
-
|
|
70
|
-
browsers = browsers.split(',').map(function(browser) {
|
|
71
|
-
var parts = browser.split(/:/);
|
|
72
|
-
if (parts[0] === 'ie') {
|
|
73
|
-
parts[0] = webdriver.Browser.IE;
|
|
74
|
-
}
|
|
75
|
-
if (parts[0] === 'edge') {
|
|
76
|
-
parts[0] = webdriver.Browser.EDGE;
|
|
77
|
-
}
|
|
78
|
-
if (noMarionette && parts[0] === webdriver.Browser.FIREFOX) {
|
|
79
|
-
parts[0] = LEGACY_FIREFOX;
|
|
80
|
-
}
|
|
81
|
-
return parts.join(':');
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
browsers.forEach(function(browser) {
|
|
85
|
-
var parts = browser.split(/:/, 3);
|
|
86
|
-
if (parts[0] === 'ie') {
|
|
87
|
-
parts[0] = webdriver.Browser.IE;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (parts[0] === LEGACY_FIREFOX) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (NATIVE_BROWSERS.indexOf(parts[0]) == -1 && !permitRemoteBrowsers) {
|
|
95
|
-
throw Error('Browser ' + parts[0] + ' requires a WebDriver server and ' +
|
|
96
|
-
'neither the SELENIUM_REMOTE_URL nor the SELENIUM_SERVER_JAR ' +
|
|
97
|
-
'environment variables have been set.');
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
var recognized = false;
|
|
101
|
-
for (var prop in webdriver.Browser) {
|
|
102
|
-
if (webdriver.Browser.hasOwnProperty(prop) &&
|
|
103
|
-
webdriver.Browser[prop] === parts[0]) {
|
|
104
|
-
recognized = true;
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (!recognized && !permitUnknownBrowsers) {
|
|
110
|
-
throw Error('Unrecognized browser: ' + browser);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
console.log('Running tests against [' + browsers.join(',') + ']');
|
|
115
|
-
if (remoteUrl) {
|
|
116
|
-
console.log('Using remote server ' + remoteUrl);
|
|
117
|
-
} else if (serverJar) {
|
|
118
|
-
console.log('Using standalone Selenium server ' + serverJar);
|
|
119
|
-
if (useLoopback) {
|
|
120
|
-
console.log('Running tests using loopback address')
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
console.log(
|
|
124
|
-
'Promise manager is enabled? ' + webdriver.promise.USE_PROMISE_MANAGER);
|
|
125
|
-
|
|
126
|
-
return browsers;
|
|
127
|
-
})();
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Creates a predicate function that ignores tests for specific browsers.
|
|
132
|
-
* @param {string} currentBrowser The name of the current browser.
|
|
133
|
-
* @param {!Array.<!Browser>} browsersToIgnore The browsers to ignore.
|
|
134
|
-
* @return {function(): boolean} The predicate function.
|
|
135
|
-
*/
|
|
136
|
-
function browsers(currentBrowser, browsersToIgnore) {
|
|
137
|
-
return function() {
|
|
138
|
-
return browsersToIgnore.indexOf(currentBrowser) != -1;
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* @param {string} browserName The name to use.
|
|
145
|
-
* @param {remote.DriverService} server The server to use, if any.
|
|
146
|
-
* @constructor
|
|
147
|
-
*/
|
|
148
|
-
function TestEnvironment(browserName, server) {
|
|
149
|
-
var name = browserName;
|
|
150
|
-
|
|
151
|
-
this.currentBrowser = function() {
|
|
152
|
-
return browserName;
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
this.isRemote = function() {
|
|
156
|
-
return server || remoteUrl;
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
this.isMarionette = function() {
|
|
160
|
-
return !noMarionette;
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
this.browsers = function(var_args) {
|
|
164
|
-
var browsersToIgnore = Array.prototype.slice.apply(arguments, [0]);
|
|
165
|
-
return browsers(browserName, browsersToIgnore);
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
this.builder = function() {
|
|
169
|
-
var builder = new webdriver.Builder();
|
|
170
|
-
var realBuild = builder.build;
|
|
171
|
-
|
|
172
|
-
builder.build = function() {
|
|
173
|
-
var parts = browserName.split(/:/, 3);
|
|
174
|
-
|
|
175
|
-
if (parts[0] === LEGACY_FIREFOX) {
|
|
176
|
-
var options = builder.getFirefoxOptions() || new firefox.Options();
|
|
177
|
-
options.useGeckoDriver(false);
|
|
178
|
-
builder.setFirefoxOptions(options);
|
|
179
|
-
|
|
180
|
-
parts[0] = webdriver.Browser.FIREFOX;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
builder.forBrowser(parts[0], parts[1], parts[2]);
|
|
184
|
-
if (server) {
|
|
185
|
-
builder.usingServer(server.address());
|
|
186
|
-
} else if (remoteUrl) {
|
|
187
|
-
builder.usingServer(remoteUrl);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
builder.disableEnvironmentOverrides();
|
|
191
|
-
return realBuild.call(builder);
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
return builder;
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
var seleniumServer;
|
|
200
|
-
var inSuite = false;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Expands a function to cover each of the target browsers.
|
|
205
|
-
* @param {function(!TestEnvironment)} fn The top level suite
|
|
206
|
-
* function.
|
|
207
|
-
* @param {{browsers: !Array.<string>}=} opt_options Suite specific options.
|
|
208
|
-
*/
|
|
209
|
-
function suite(fn, opt_options) {
|
|
210
|
-
assert.ok(!inSuite, 'You may not nest suite calls');
|
|
211
|
-
inSuite = true;
|
|
212
|
-
|
|
213
|
-
var suiteOptions = opt_options || {};
|
|
214
|
-
var browsers = suiteOptions.browsers;
|
|
215
|
-
if (browsers) {
|
|
216
|
-
// Filter out browser specific tests when that browser is not currently
|
|
217
|
-
// selected for testing.
|
|
218
|
-
browsers = browsers.filter(function(browser) {
|
|
219
|
-
return browsersToTest.indexOf(browser) != -1;
|
|
220
|
-
});
|
|
221
|
-
} else {
|
|
222
|
-
browsers = browsersToTest;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
try {
|
|
226
|
-
|
|
39
|
+
function suite(fn, options = undefined) {
|
|
40
|
+
testing.suite(function(env) {
|
|
227
41
|
before(function() {
|
|
228
|
-
if (isDevMode) {
|
|
42
|
+
if (isDevMode && !NO_BUILD) {
|
|
229
43
|
return build.of(
|
|
230
44
|
'//javascript/atoms/fragments:is-displayed',
|
|
231
|
-
'//javascript/webdriver/atoms:
|
|
45
|
+
'//javascript/webdriver/atoms:get-attribute')
|
|
232
46
|
.onlyOnce().go();
|
|
233
47
|
}
|
|
234
48
|
});
|
|
235
49
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
return seleniumServer.stop();
|
|
240
|
-
}
|
|
241
|
-
});
|
|
50
|
+
fn(env);
|
|
51
|
+
}, options);
|
|
52
|
+
}
|
|
242
53
|
|
|
243
|
-
browsers.forEach(function(browser) {
|
|
244
|
-
describe('[' + browser + ']', function() {
|
|
245
54
|
|
|
246
|
-
|
|
247
|
-
if (browser === LEGACY_FIREFOX) {
|
|
248
|
-
before(function() {
|
|
249
|
-
return build.of('//javascript/firefox-driver:webdriver')
|
|
250
|
-
.onlyOnce().go();
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
}
|
|
55
|
+
// GLOBAL TEST SETUP
|
|
254
56
|
|
|
255
|
-
var serverToUse = null;
|
|
256
57
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
serverJar, {loopback: useLoopback});
|
|
261
|
-
}
|
|
58
|
+
process.on('unhandledRejection', (reason) => {
|
|
59
|
+
console.error('Unhandled promise rejection:', reason);
|
|
60
|
+
});
|
|
262
61
|
|
|
263
|
-
before(function() {
|
|
264
|
-
this.timeout(0);
|
|
265
|
-
return seleniumServer.start(60 * 1000);
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
fn(new TestEnvironment(browser, serverToUse));
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
|
-
} finally {
|
|
272
|
-
inSuite = false;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
62
|
|
|
63
|
+
if (/^1|true$/i.test(process.env['SELENIUM_VERBOSE'])) {
|
|
64
|
+
logging.installConsoleHandler();
|
|
65
|
+
logging.getLogger('webdriver.http').setLevel(logging.Level.ALL);
|
|
66
|
+
}
|
|
276
67
|
|
|
277
|
-
|
|
68
|
+
testing.init();
|
|
278
69
|
|
|
279
70
|
before(function() {
|
|
280
71
|
// Do not pass register fileserver.start directly with testing.before,
|
|
@@ -287,16 +78,11 @@ after(function() {
|
|
|
287
78
|
return fileserver.stop();
|
|
288
79
|
});
|
|
289
80
|
|
|
81
|
+
|
|
290
82
|
// PUBLIC API
|
|
291
83
|
|
|
292
84
|
|
|
293
85
|
exports.suite = suite;
|
|
294
|
-
exports.after = testing.after;
|
|
295
|
-
exports.afterEach = testing.afterEach;
|
|
296
|
-
exports.before = testing.before;
|
|
297
|
-
exports.beforeEach = testing.beforeEach;
|
|
298
|
-
exports.it = testing.it;
|
|
299
86
|
exports.ignore = testing.ignore;
|
|
300
|
-
|
|
301
87
|
exports.Pages = fileserver.Pages;
|
|
302
88
|
exports.whereIs = fileserver.whereIs;
|
package/lib/test/resources.js
CHANGED
|
@@ -30,7 +30,6 @@ var resourceRoot = require('../devmode') ?
|
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Locates a test resource.
|
|
33
|
-
* @param {string} resourcePath Path of the resource to locate.
|
|
34
33
|
* @param {string} filePath The file to locate from the root of the project.
|
|
35
34
|
* @return {string} The full path for the file, if it exists.
|
|
36
35
|
* @throws {Error} If the file does not exist.
|