selenium-webdriver 3.6.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 +181 -0
- package/README.md +25 -27
- package/chrome.js +113 -127
- package/edge.js +42 -117
- package/example/chrome_android.js +8 -8
- package/example/chrome_mobile_emulation.js +8 -8
- package/example/firefox_channels.js +22 -18
- package/example/google_search_test.js +39 -26
- package/example/logging.js +39 -6
- package/firefox.js +769 -0
- package/http/index.js +41 -4
- package/http/util.js +11 -6
- package/ie.js +56 -97
- package/index.js +178 -114
- package/jasmine.json +11 -0
- package/lib/actions.js +68 -63
- package/lib/by.js +1 -1
- package/lib/capabilities.js +255 -192
- package/lib/command.js +26 -50
- package/lib/error.js +85 -44
- package/lib/http.js +133 -110
- package/lib/input.js +1044 -8
- package/lib/promise.js +222 -3323
- 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/inputs.html +42 -0
- package/lib/test/data/selectPage.html +12 -0
- package/lib/test/data/simpleTest.html +5 -0
- package/lib/test/data/upload_invisible.html +45 -0
- package/lib/test/fileserver.js +23 -19
- package/lib/test/index.js +30 -212
- package/lib/test/resources.js +0 -1
- package/lib/webdriver.js +675 -936
- package/net/index.js +21 -25
- package/net/portprober.js +51 -68
- package/package.json +5 -3
- package/remote/index.js +5 -19
- package/safari.js +41 -128
- package/test/actions_test.js +173 -18
- package/test/{session_test.js → builder_test.js} +44 -37
- 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 +0 -1
- package/test/http/util_test.js +2 -2
- package/test/io/zip_test.js +6 -7
- package/test/lib/error_test.js +34 -7
- package/test/lib/http_test.js +8 -128
- package/test/lib/input_test.js +1379 -0
- package/test/lib/promise_test.js +473 -908
- package/test/lib/webdriver_test.js +296 -868
- package/test/logging_test.js +37 -43
- package/test/page_loading_test.js +71 -81
- package/test/proxy_test.js +64 -72
- package/test/rect_test.js +14 -25
- package/test/remote_test.js +10 -29
- 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 -314
- package/.npmignore +0 -2
- package/example/async_await_test.js +0 -69
- package/example/google_search_generator.js +0 -47
- package/example/parallel_flows.js +0 -51
- package/firefox/binary.js +0 -347
- package/firefox/extension.js +0 -224
- package/firefox/index.js +0 -576
- package/firefox/profile.js +0 -311
- package/lib/events.js +0 -210
- 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 -120
- package/test/firefox/firefox_test.js +0 -244
- package/test/firefox/profile_test.js +0 -140
- 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/testing/assert_test.js +0 -373
- package/test/testing/index_test.js +0 -224
- package/testing/assert.js +0 -378
package/lib/test/index.js
CHANGED
|
@@ -17,192 +17,29 @@
|
|
|
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
|
-
/**
|
|
35
|
-
* Browsers with native support.
|
|
36
|
-
* @type {!Array.<webdriver.Browser>}
|
|
37
|
-
*/
|
|
38
|
-
var NATIVE_BROWSERS = [
|
|
39
|
-
webdriver.Browser.CHROME,
|
|
40
|
-
webdriver.Browser.EDGE,
|
|
41
|
-
webdriver.Browser.FIREFOX,
|
|
42
|
-
webdriver.Browser.IE,
|
|
43
|
-
webdriver.Browser.OPERA,
|
|
44
|
-
webdriver.Browser.PHANTOM_JS,
|
|
45
|
-
webdriver.Browser.SAFARI
|
|
46
|
-
];
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
var noBuild = /^1|true$/i.test(process.env['SELENIUM_NO_BUILD']);
|
|
50
|
-
var serverJar = process.env['SELENIUM_SERVER_JAR'];
|
|
51
|
-
var remoteUrl = process.env['SELENIUM_REMOTE_URL'];
|
|
52
|
-
var useLoopback = process.env['SELENIUM_USE_LOOP_BACK'] == '1';
|
|
53
|
-
var startServer = !!serverJar && !remoteUrl;
|
|
54
|
-
var nativeRun = !serverJar && !remoteUrl;
|
|
55
|
-
|
|
56
|
-
if (/^1|true$/i.test(process.env['SELENIUM_VERBOSE'])) {
|
|
57
|
-
logging.installConsoleHandler();
|
|
58
|
-
logging.getLogger('webdriver.http').setLevel(logging.Level.ALL);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
var browsersToTest = (function() {
|
|
62
|
-
var permitRemoteBrowsers = !!remoteUrl || !!serverJar;
|
|
63
|
-
var permitUnknownBrowsers = !nativeRun;
|
|
64
|
-
var browsers = process.env['SELENIUM_BROWSER'] || webdriver.Browser.FIREFOX;
|
|
65
|
-
|
|
66
|
-
browsers = browsers.split(',').map(function(browser) {
|
|
67
|
-
var parts = browser.split(/:/);
|
|
68
|
-
if (parts[0] === 'ie') {
|
|
69
|
-
parts[0] = webdriver.Browser.IE;
|
|
70
|
-
}
|
|
71
|
-
if (parts[0] === 'edge') {
|
|
72
|
-
parts[0] = webdriver.Browser.EDGE;
|
|
73
|
-
}
|
|
74
|
-
return parts.join(':');
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
browsers.forEach(function(browser) {
|
|
78
|
-
var parts = browser.split(/:/, 3);
|
|
79
|
-
if (parts[0] === 'ie') {
|
|
80
|
-
parts[0] = webdriver.Browser.IE;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (NATIVE_BROWSERS.indexOf(parts[0]) == -1 && !permitRemoteBrowsers) {
|
|
84
|
-
throw Error('Browser ' + parts[0] + ' requires a WebDriver server and ' +
|
|
85
|
-
'neither the SELENIUM_REMOTE_URL nor the SELENIUM_SERVER_JAR ' +
|
|
86
|
-
'environment variables have been set.');
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
var recognized = false;
|
|
90
|
-
for (var prop in webdriver.Browser) {
|
|
91
|
-
if (webdriver.Browser.hasOwnProperty(prop) &&
|
|
92
|
-
webdriver.Browser[prop] === parts[0]) {
|
|
93
|
-
recognized = true;
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (!recognized && !permitUnknownBrowsers) {
|
|
99
|
-
throw Error('Unrecognized browser: ' + browser);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
console.log('Running tests against [' + browsers.join(',') + ']');
|
|
104
|
-
if (remoteUrl) {
|
|
105
|
-
console.log('Using remote server ' + remoteUrl);
|
|
106
|
-
} else if (serverJar) {
|
|
107
|
-
console.log('Using standalone Selenium server ' + serverJar);
|
|
108
|
-
if (useLoopback) {
|
|
109
|
-
console.log('Running tests using loopback address')
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
console.log(
|
|
113
|
-
'Promise manager is enabled? ' + webdriver.promise.USE_PROMISE_MANAGER);
|
|
114
|
-
|
|
115
|
-
return browsers;
|
|
116
|
-
})();
|
|
32
|
+
const NO_BUILD = /^1|true$/i.test(process.env['SELENIUM_NO_BUILD']);
|
|
117
33
|
|
|
118
34
|
|
|
119
35
|
/**
|
|
120
|
-
*
|
|
121
|
-
* @param {
|
|
122
|
-
* @param {!Array.<!Browser>} browsersToIgnore The browsers to ignore.
|
|
123
|
-
* @return {function(): boolean} The predicate function.
|
|
36
|
+
* @param {function(!testing.Environment)} fn The top level suite function.
|
|
37
|
+
* @param {testing.SuiteOptions=} options Suite specific options.
|
|
124
38
|
*/
|
|
125
|
-
function
|
|
126
|
-
|
|
127
|
-
return browsersToIgnore.indexOf(currentBrowser) != -1;
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* @param {string} browserName The name to use.
|
|
134
|
-
* @param {remote.DriverService} server The server to use, if any.
|
|
135
|
-
* @constructor
|
|
136
|
-
*/
|
|
137
|
-
function TestEnvironment(browserName, server) {
|
|
138
|
-
var name = browserName;
|
|
139
|
-
|
|
140
|
-
this.currentBrowser = function() {
|
|
141
|
-
return browserName;
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
this.isRemote = function() {
|
|
145
|
-
return server || remoteUrl;
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
this.browsers = function(var_args) {
|
|
149
|
-
var browsersToIgnore = Array.prototype.slice.apply(arguments, [0]);
|
|
150
|
-
return browsers(browserName, browsersToIgnore);
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
this.builder = function() {
|
|
154
|
-
var builder = new webdriver.Builder();
|
|
155
|
-
var realBuild = builder.build;
|
|
156
|
-
|
|
157
|
-
builder.build = function() {
|
|
158
|
-
let parts = browserName.split(/:/, 3);
|
|
159
|
-
|
|
160
|
-
builder.forBrowser(parts[0], parts[1], parts[2]);
|
|
161
|
-
if (server) {
|
|
162
|
-
builder.usingServer(server.address());
|
|
163
|
-
} else if (remoteUrl) {
|
|
164
|
-
builder.usingServer(remoteUrl);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
builder.disableEnvironmentOverrides();
|
|
168
|
-
return realBuild.call(builder);
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
return builder;
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
var seleniumServer;
|
|
177
|
-
var inSuite = false;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Expands a function to cover each of the target browsers.
|
|
182
|
-
* @param {function(!TestEnvironment)} fn The top level suite
|
|
183
|
-
* function.
|
|
184
|
-
* @param {{browsers: !Array.<string>}=} opt_options Suite specific options.
|
|
185
|
-
*/
|
|
186
|
-
function suite(fn, opt_options) {
|
|
187
|
-
assert.ok(!inSuite, 'You may not nest suite calls');
|
|
188
|
-
inSuite = true;
|
|
189
|
-
|
|
190
|
-
var suiteOptions = opt_options || {};
|
|
191
|
-
var browsers = suiteOptions.browsers;
|
|
192
|
-
if (browsers) {
|
|
193
|
-
// Filter out browser specific tests when that browser is not currently
|
|
194
|
-
// selected for testing.
|
|
195
|
-
browsers = browsers.filter(function(browser) {
|
|
196
|
-
return browsersToTest.indexOf(browser) != -1;
|
|
197
|
-
});
|
|
198
|
-
} else {
|
|
199
|
-
browsers = browsersToTest;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
try {
|
|
203
|
-
|
|
39
|
+
function suite(fn, options = undefined) {
|
|
40
|
+
testing.suite(function(env) {
|
|
204
41
|
before(function() {
|
|
205
|
-
if (isDevMode && !
|
|
42
|
+
if (isDevMode && !NO_BUILD) {
|
|
206
43
|
return build.of(
|
|
207
44
|
'//javascript/atoms/fragments:is-displayed',
|
|
208
45
|
'//javascript/webdriver/atoms:get-attribute')
|
|
@@ -210,39 +47,25 @@ function suite(fn, opt_options) {
|
|
|
210
47
|
}
|
|
211
48
|
});
|
|
212
49
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
return seleniumServer.stop();
|
|
217
|
-
}
|
|
218
|
-
});
|
|
50
|
+
fn(env);
|
|
51
|
+
}, options);
|
|
52
|
+
}
|
|
219
53
|
|
|
220
|
-
browsers.forEach(function(browser) {
|
|
221
|
-
describe('[' + browser + ']', function() {
|
|
222
54
|
|
|
223
|
-
|
|
55
|
+
// GLOBAL TEST SETUP
|
|
224
56
|
|
|
225
|
-
if (!!serverJar && !remoteUrl) {
|
|
226
|
-
if (!(serverToUse = seleniumServer)) {
|
|
227
|
-
serverToUse = seleniumServer = new remote.SeleniumServer(
|
|
228
|
-
serverJar, {loopback: useLoopback});
|
|
229
|
-
}
|
|
230
57
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
fn(new TestEnvironment(browser, serverToUse));
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
|
-
} finally {
|
|
240
|
-
inSuite = false;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
58
|
+
process.on('unhandledRejection', (reason) => {
|
|
59
|
+
console.error('Unhandled promise rejection:', reason);
|
|
60
|
+
});
|
|
243
61
|
|
|
244
62
|
|
|
245
|
-
|
|
63
|
+
if (/^1|true$/i.test(process.env['SELENIUM_VERBOSE'])) {
|
|
64
|
+
logging.installConsoleHandler();
|
|
65
|
+
logging.getLogger('webdriver.http').setLevel(logging.Level.ALL);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
testing.init();
|
|
246
69
|
|
|
247
70
|
before(function() {
|
|
248
71
|
// Do not pass register fileserver.start directly with testing.before,
|
|
@@ -255,16 +78,11 @@ after(function() {
|
|
|
255
78
|
return fileserver.stop();
|
|
256
79
|
});
|
|
257
80
|
|
|
81
|
+
|
|
258
82
|
// PUBLIC API
|
|
259
83
|
|
|
260
84
|
|
|
261
85
|
exports.suite = suite;
|
|
262
|
-
exports.after = testing.after;
|
|
263
|
-
exports.afterEach = testing.afterEach;
|
|
264
|
-
exports.before = testing.before;
|
|
265
|
-
exports.beforeEach = testing.beforeEach;
|
|
266
|
-
exports.it = testing.it;
|
|
267
86
|
exports.ignore = testing.ignore;
|
|
268
|
-
|
|
269
87
|
exports.Pages = fileserver.Pages;
|
|
270
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.
|