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
|
@@ -17,28 +17,28 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
chrome = require('../../chrome'),
|
|
22
|
-
assert = require('../../testing/assert');
|
|
20
|
+
const assert = require('assert');
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
const chrome = require('../../chrome');
|
|
23
|
+
const test = require('../../lib/test');
|
|
24
|
+
const webdriver = require('../..');
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
test.suite(function(env) {
|
|
28
28
|
describe('chromedriver', function() {
|
|
29
29
|
var service;
|
|
30
|
-
|
|
30
|
+
afterEach(function() {
|
|
31
31
|
if (service) {
|
|
32
32
|
return service.kill();
|
|
33
33
|
}
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
it('can be started on a custom path', function() {
|
|
37
37
|
service = new chrome.ServiceBuilder()
|
|
38
38
|
.setPath('/foo/bar/baz')
|
|
39
39
|
.build();
|
|
40
40
|
return service.start().then(function(url) {
|
|
41
|
-
assert(url
|
|
41
|
+
assert.ok(url.endsWith('/foo/bar/baz'), 'unexpected url: ' + url);
|
|
42
42
|
});
|
|
43
43
|
});
|
|
44
44
|
});
|
package/test/cookie_test.js
CHANGED
|
@@ -20,157 +20,171 @@
|
|
|
20
20
|
var assert = require('assert'),
|
|
21
21
|
url = require('url');
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var {Pages, ignore, suite} = require('../lib/test'),
|
|
24
24
|
fileserver = require('../lib/test/fileserver'),
|
|
25
|
-
Browser = require('..')
|
|
26
|
-
Pages = test.Pages;
|
|
25
|
+
{Browser} = require('..');
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
suite(function(env) {
|
|
30
29
|
var driver;
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
driver =
|
|
31
|
+
before(async function() {
|
|
32
|
+
driver = await env.builder().build();
|
|
34
33
|
});
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
after(function() {
|
|
37
36
|
return driver.quit();
|
|
38
37
|
});
|
|
39
38
|
|
|
40
|
-
// Cookie handling is broken.
|
|
41
|
-
test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.SAFARI)).
|
|
42
39
|
describe('Cookie Management;', function() {
|
|
43
40
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
beforeEach(async function() {
|
|
42
|
+
await driver.get(fileserver.Pages.ajaxyPage);
|
|
43
|
+
await driver.manage().deleteAllCookies();
|
|
47
44
|
return assertHasCookies();
|
|
48
45
|
});
|
|
49
46
|
|
|
50
|
-
|
|
47
|
+
it('can add new cookies', async function() {
|
|
51
48
|
var cookie = createCookieSpec();
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
await driver.manage().addCookie(cookie);
|
|
51
|
+
await driver.manage().getCookie(cookie.name).then(function(actual) {
|
|
55
52
|
assert.equal(actual.value, cookie.value);
|
|
56
53
|
});
|
|
57
54
|
});
|
|
58
55
|
|
|
59
|
-
|
|
56
|
+
it('can get all cookies', async function() {
|
|
60
57
|
var cookie1 = createCookieSpec();
|
|
61
58
|
var cookie2 = createCookieSpec();
|
|
62
59
|
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
await driver.manage().addCookie(cookie1);
|
|
61
|
+
await driver.manage().addCookie(cookie2);
|
|
65
62
|
|
|
66
63
|
return assertHasCookies(cookie1, cookie2);
|
|
67
64
|
});
|
|
68
65
|
|
|
69
|
-
|
|
70
|
-
it('only returns cookies visible to the current page', function
|
|
66
|
+
ignore(env.browsers(Browser.IE)).
|
|
67
|
+
it('only returns cookies visible to the current page', async function() {
|
|
71
68
|
var cookie1 = createCookieSpec();
|
|
72
69
|
|
|
73
|
-
|
|
70
|
+
await driver.manage().addCookie(cookie1);
|
|
74
71
|
|
|
75
72
|
var pageUrl = fileserver.whereIs('page/1');
|
|
76
73
|
var cookie2 = createCookieSpec({
|
|
77
74
|
path: url.parse(pageUrl).pathname
|
|
78
75
|
});
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
await driver.get(pageUrl);
|
|
77
|
+
await driver.manage().addCookie(cookie2);
|
|
78
|
+
await assertHasCookies(cookie1, cookie2);
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
await driver.get(fileserver.Pages.ajaxyPage);
|
|
81
|
+
await assertHasCookies(cookie1);
|
|
85
82
|
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
await driver.get(pageUrl);
|
|
84
|
+
await assertHasCookies(cookie1, cookie2);
|
|
88
85
|
});
|
|
89
86
|
|
|
90
|
-
|
|
87
|
+
it('can delete all cookies', async function() {
|
|
91
88
|
var cookie1 = createCookieSpec();
|
|
92
89
|
var cookie2 = createCookieSpec();
|
|
93
90
|
|
|
94
|
-
|
|
91
|
+
await driver.executeScript(
|
|
95
92
|
'document.cookie = arguments[0] + "=" + arguments[1];' +
|
|
96
93
|
'document.cookie = arguments[2] + "=" + arguments[3];',
|
|
97
94
|
cookie1.name, cookie1.value, cookie2.name, cookie2.value);
|
|
98
|
-
|
|
95
|
+
await assertHasCookies(cookie1, cookie2);
|
|
99
96
|
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
await driver.manage().deleteAllCookies();
|
|
98
|
+
await assertHasCookies();
|
|
102
99
|
});
|
|
103
100
|
|
|
104
|
-
|
|
101
|
+
it('can delete cookies by name', async function() {
|
|
105
102
|
var cookie1 = createCookieSpec();
|
|
106
103
|
var cookie2 = createCookieSpec();
|
|
107
104
|
|
|
108
|
-
|
|
105
|
+
await driver.executeScript(
|
|
109
106
|
'document.cookie = arguments[0] + "=" + arguments[1];' +
|
|
110
107
|
'document.cookie = arguments[2] + "=" + arguments[3];',
|
|
111
108
|
cookie1.name, cookie1.value, cookie2.name, cookie2.value);
|
|
112
|
-
|
|
109
|
+
await assertHasCookies(cookie1, cookie2);
|
|
113
110
|
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
await driver.manage().deleteCookie(cookie1.name);
|
|
112
|
+
await assertHasCookies(cookie2);
|
|
116
113
|
});
|
|
117
114
|
|
|
118
|
-
|
|
115
|
+
it('should only delete cookie with exact name', async function() {
|
|
119
116
|
var cookie1 = createCookieSpec();
|
|
120
117
|
var cookie2 = createCookieSpec();
|
|
121
118
|
var cookie3 = {name: cookie1.name + 'xx', value: cookie1.value};
|
|
122
119
|
|
|
123
|
-
|
|
120
|
+
await driver.executeScript(
|
|
124
121
|
'document.cookie = arguments[0] + "=" + arguments[1];' +
|
|
125
122
|
'document.cookie = arguments[2] + "=" + arguments[3];' +
|
|
126
123
|
'document.cookie = arguments[4] + "=" + arguments[5];',
|
|
127
124
|
cookie1.name, cookie1.value, cookie2.name, cookie2.value,
|
|
128
125
|
cookie3.name, cookie3.value);
|
|
129
|
-
|
|
126
|
+
await assertHasCookies(cookie1, cookie2, cookie3);
|
|
130
127
|
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
await driver.manage().deleteCookie(cookie1.name);
|
|
129
|
+
await assertHasCookies(cookie2, cookie3);
|
|
133
130
|
});
|
|
134
131
|
|
|
135
|
-
|
|
132
|
+
it('can delete cookies set higher in the path', async function() {
|
|
136
133
|
var cookie = createCookieSpec();
|
|
137
134
|
var childUrl = fileserver.whereIs('child/childPage.html');
|
|
138
135
|
var grandchildUrl = fileserver.whereIs(
|
|
139
136
|
'child/grandchild/grandchildPage.html');
|
|
140
137
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
await driver.get(childUrl);
|
|
139
|
+
await driver.manage().addCookie(cookie);
|
|
140
|
+
await assertHasCookies(cookie);
|
|
144
141
|
|
|
145
|
-
|
|
146
|
-
|
|
142
|
+
await driver.get(grandchildUrl);
|
|
143
|
+
await assertHasCookies(cookie);
|
|
147
144
|
|
|
148
|
-
|
|
149
|
-
|
|
145
|
+
await driver.manage().deleteCookie(cookie.name);
|
|
146
|
+
await assertHasCookies();
|
|
150
147
|
|
|
151
|
-
|
|
152
|
-
|
|
148
|
+
await driver.get(childUrl);
|
|
149
|
+
await assertHasCookies();
|
|
153
150
|
});
|
|
154
151
|
|
|
155
|
-
|
|
156
|
-
Browser.ANDROID,
|
|
152
|
+
ignore(env.browsers(
|
|
157
153
|
Browser.FIREFOX,
|
|
158
|
-
'legacy-' + Browser.FIREFOX,
|
|
159
154
|
Browser.IE)).
|
|
160
|
-
it('should retain cookie expiry', function
|
|
155
|
+
it('should retain cookie expiry', async function() {
|
|
161
156
|
let expirationDelay = 5 * 1000;
|
|
162
157
|
let expiry = new Date(Date.now() + expirationDelay);
|
|
163
158
|
let cookie = createCookieSpec({expiry});
|
|
164
159
|
|
|
165
|
-
|
|
166
|
-
|
|
160
|
+
await driver.manage().addCookie(cookie);
|
|
161
|
+
await driver.manage().getCookie(cookie.name).then(function(actual) {
|
|
167
162
|
assert.equal(actual.value, cookie.value);
|
|
168
|
-
|
|
169
|
-
|
|
163
|
+
|
|
164
|
+
// expiry times should be in seconds since January 1, 1970 UTC
|
|
165
|
+
try {
|
|
166
|
+
assert.equal(actual.expiry, Math.floor(expiry.getTime() / 1000));
|
|
167
|
+
assert.notEqual(
|
|
168
|
+
env.browser.name, Browser.SAFARI,
|
|
169
|
+
'Safari cookie expiry fixed; update test');
|
|
170
|
+
} catch (ex) {
|
|
171
|
+
if (env.browser.name !== Browser.SAFARI
|
|
172
|
+
|| !(ex instanceof assert.AssertionError)) {
|
|
173
|
+
throw ex;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Safari returns milliseconds (and is off by a few seconds...)
|
|
177
|
+
let diff = Math.abs(actual.expiry - expiry.getTime());
|
|
178
|
+
if (diff > 2000) {
|
|
179
|
+
assert.fail(
|
|
180
|
+
actual.expiry, expiry.getTime(),
|
|
181
|
+
'Expect Safari to return expiry in millis since epoch ± 2s');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
170
184
|
});
|
|
171
185
|
|
|
172
|
-
|
|
173
|
-
|
|
186
|
+
await driver.sleep(expirationDelay);
|
|
187
|
+
await assertHasCookies();
|
|
174
188
|
});
|
|
175
189
|
});
|
|
176
190
|
|