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.
Files changed (117) hide show
  1. package/CHANGES.md +273 -0
  2. package/NOTICE +1 -1
  3. package/README.md +28 -36
  4. package/chrome.js +221 -146
  5. package/edge.js +43 -118
  6. package/example/chrome_android.js +8 -9
  7. package/example/chrome_mobile_emulation.js +9 -10
  8. package/example/firefox_channels.js +23 -19
  9. package/example/google_search.js +3 -3
  10. package/example/google_search_test.js +39 -27
  11. package/example/headless.js +55 -0
  12. package/example/logging.js +40 -7
  13. package/firefox.js +769 -0
  14. package/http/index.js +41 -4
  15. package/http/util.js +11 -6
  16. package/ie.js +57 -98
  17. package/index.js +182 -115
  18. package/io/index.js +59 -0
  19. package/io/zip.js +214 -0
  20. package/jasmine.json +11 -0
  21. package/lib/actions.js +68 -63
  22. package/lib/atoms/get-attribute.js +9 -0
  23. package/lib/atoms/is-displayed.js +73 -78
  24. package/lib/by.js +9 -1
  25. package/lib/capabilities.js +303 -201
  26. package/lib/command.js +28 -50
  27. package/lib/error.js +113 -42
  28. package/lib/http.js +167 -135
  29. package/lib/input.js +1044 -8
  30. package/lib/promise.js +222 -3331
  31. package/lib/proxy.js +134 -39
  32. package/lib/test/bootstrap_jasmine.js +28 -0
  33. package/lib/test/data/actions/click.html +24 -0
  34. package/lib/test/data/actions/drag.html +77 -0
  35. package/lib/test/data/actions/record_click.html +21 -0
  36. package/lib/test/data/chrome/download.html +2 -0
  37. package/lib/test/data/click_tests/disabled_element.html +12 -0
  38. package/lib/test/data/content-editable.html +10 -0
  39. package/lib/test/data/firefox/webextension.xpi +0 -0
  40. package/lib/test/data/inputs.html +42 -0
  41. package/lib/test/data/key_logger.html +34 -0
  42. package/lib/test/data/nestedElements.html +10 -1
  43. package/lib/test/data/scrolling_tests/page_with_partially_hidden_element.html +14 -0
  44. package/lib/test/data/selectPage.html +12 -0
  45. package/lib/test/data/simpleTest.html +5 -0
  46. package/lib/test/data/single_text_input.html +12 -0
  47. package/lib/test/data/upload_invisible.html +45 -0
  48. package/lib/test/fileserver.js +23 -19
  49. package/lib/test/index.js +30 -244
  50. package/lib/test/resources.js +0 -1
  51. package/lib/webdriver.js +770 -939
  52. package/net/index.js +21 -25
  53. package/net/portprober.js +51 -68
  54. package/package.json +6 -4
  55. package/remote/index.js +18 -30
  56. package/safari.js +42 -129
  57. package/test/actions_test.js +173 -18
  58. package/test/builder_test.js +106 -0
  59. package/test/chrome/devtools_test.js +93 -0
  60. package/test/chrome/options_test.js +48 -154
  61. package/test/chrome/service_test.js +7 -7
  62. package/test/cookie_test.js +77 -63
  63. package/test/element_finding_test.js +206 -201
  64. package/test/execute_script_test.js +115 -114
  65. package/test/fingerprint_test.js +16 -15
  66. package/test/firefox_test.js +251 -0
  67. package/test/http/http_test.js +18 -1
  68. package/test/http/util_test.js +2 -2
  69. package/test/{io_test.js → io/io_test.js} +40 -1
  70. package/test/io/zip_test.js +127 -0
  71. package/test/lib/by_test.js +21 -0
  72. package/test/lib/error_test.js +55 -8
  73. package/test/lib/http_test.js +18 -130
  74. package/test/lib/input_test.js +1379 -0
  75. package/test/lib/promise_test.js +473 -908
  76. package/test/lib/webdriver_test.js +357 -825
  77. package/test/logging_test.js +37 -43
  78. package/test/page_loading_test.js +70 -86
  79. package/test/proxy_test.js +64 -72
  80. package/test/rect_test.js +14 -25
  81. package/test/remote_test.js +13 -32
  82. package/test/safari_test.js +7 -71
  83. package/test/stale_element_test.js +20 -23
  84. package/test/tag_name_test.js +10 -9
  85. package/test/upload_test.js +27 -35
  86. package/test/window_test.js +72 -85
  87. package/testing/index.js +386 -315
  88. package/.npmignore +0 -2
  89. package/example/async_await_test.js +0 -68
  90. package/example/google_search_generator.js +0 -50
  91. package/example/parallel_flows.js +0 -54
  92. package/firefox/binary.js +0 -344
  93. package/firefox/extension.js +0 -187
  94. package/firefox/index.js +0 -722
  95. package/firefox/profile.js +0 -430
  96. package/lib/atoms/getAttribute.js +0 -12
  97. package/lib/events.js +0 -210
  98. package/lib/firefox/webdriver.json +0 -70
  99. package/lib/firefox/webdriver.xpi +0 -0
  100. package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
  101. package/lib/test/data/firefox/sample.xpi +0 -0
  102. package/lib/test/promise.js +0 -79
  103. package/opera.js +0 -405
  104. package/phantomjs.js +0 -282
  105. package/test/firefox/extension_test.js +0 -96
  106. package/test/firefox/firefox_test.js +0 -226
  107. package/test/firefox/profile_test.js +0 -185
  108. package/test/lib/events_test.js +0 -177
  109. package/test/lib/promise_aplus_test.js +0 -78
  110. package/test/lib/promise_error_test.js +0 -884
  111. package/test/lib/promise_flow_test.js +0 -2288
  112. package/test/lib/promise_generator_test.js +0 -310
  113. package/test/phantomjs/execute_phantomjs_test.js +0 -59
  114. package/test/session_test.js +0 -54
  115. package/test/testing/assert_test.js +0 -373
  116. package/test/testing/index_test.js +0 -224
  117. package/testing/assert.js +0 -378
@@ -17,28 +17,28 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var webdriver = require('../..'),
21
- chrome = require('../../chrome'),
22
- assert = require('../../testing/assert');
20
+ const assert = require('assert');
23
21
 
24
- var test = require('../../lib/test');
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
- test.afterEach(function() {
30
+ afterEach(function() {
31
31
  if (service) {
32
32
  return service.kill();
33
33
  }
34
34
  });
35
35
 
36
- test.it('can be started on a custom path', function() {
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).endsWith('/foo/bar/baz');
41
+ assert.ok(url.endsWith('/foo/bar/baz'), 'unexpected url: ' + url);
42
42
  });
43
43
  });
44
44
  });
@@ -20,157 +20,171 @@
20
20
  var assert = require('assert'),
21
21
  url = require('url');
22
22
 
23
- var test = require('../lib/test'),
23
+ var {Pages, ignore, suite} = require('../lib/test'),
24
24
  fileserver = require('../lib/test/fileserver'),
25
- Browser = require('..').Browser,
26
- Pages = test.Pages;
25
+ {Browser} = require('..');
27
26
 
28
27
 
29
- test.suite(function(env) {
28
+ suite(function(env) {
30
29
  var driver;
31
30
 
32
- test.before(function*() {
33
- driver = yield env.builder().build();
31
+ before(async function() {
32
+ driver = await env.builder().build();
34
33
  });
35
34
 
36
- test.after(function() {
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
- test.beforeEach(function*() {
45
- yield driver.get(fileserver.Pages.ajaxyPage);
46
- yield driver.manage().deleteAllCookies();
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
- test.it('can add new cookies', function*() {
47
+ it('can add new cookies', async function() {
51
48
  var cookie = createCookieSpec();
52
49
 
53
- yield driver.manage().addCookie(cookie);
54
- yield driver.manage().getCookie(cookie.name).then(function(actual) {
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
- test.it('can get all cookies', function*() {
56
+ it('can get all cookies', async function() {
60
57
  var cookie1 = createCookieSpec();
61
58
  var cookie2 = createCookieSpec();
62
59
 
63
- yield driver.manage().addCookie(cookie1);
64
- yield driver.manage().addCookie(cookie2);
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
- test.ignore(env.browsers(Browser.IE)).
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
- yield driver.manage().addCookie(cookie1);
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
- yield driver.get(pageUrl);
80
- yield driver.manage().addCookie(cookie2);
81
- yield assertHasCookies(cookie1, cookie2);
76
+ await driver.get(pageUrl);
77
+ await driver.manage().addCookie(cookie2);
78
+ await assertHasCookies(cookie1, cookie2);
82
79
 
83
- yield driver.get(fileserver.Pages.ajaxyPage);
84
- yield assertHasCookies(cookie1);
80
+ await driver.get(fileserver.Pages.ajaxyPage);
81
+ await assertHasCookies(cookie1);
85
82
 
86
- yield driver.get(pageUrl);
87
- yield assertHasCookies(cookie1, cookie2);
83
+ await driver.get(pageUrl);
84
+ await assertHasCookies(cookie1, cookie2);
88
85
  });
89
86
 
90
- test.it('can delete all cookies', function*() {
87
+ it('can delete all cookies', async function() {
91
88
  var cookie1 = createCookieSpec();
92
89
  var cookie2 = createCookieSpec();
93
90
 
94
- yield driver.executeScript(
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
- yield assertHasCookies(cookie1, cookie2);
95
+ await assertHasCookies(cookie1, cookie2);
99
96
 
100
- yield driver.manage().deleteAllCookies();
101
- yield assertHasCookies();
97
+ await driver.manage().deleteAllCookies();
98
+ await assertHasCookies();
102
99
  });
103
100
 
104
- test.it('can delete cookies by name', function*() {
101
+ it('can delete cookies by name', async function() {
105
102
  var cookie1 = createCookieSpec();
106
103
  var cookie2 = createCookieSpec();
107
104
 
108
- yield driver.executeScript(
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
- yield assertHasCookies(cookie1, cookie2);
109
+ await assertHasCookies(cookie1, cookie2);
113
110
 
114
- yield driver.manage().deleteCookie(cookie1.name);
115
- yield assertHasCookies(cookie2);
111
+ await driver.manage().deleteCookie(cookie1.name);
112
+ await assertHasCookies(cookie2);
116
113
  });
117
114
 
118
- test.it('should only delete cookie with exact name', function*() {
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
- yield driver.executeScript(
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
- yield assertHasCookies(cookie1, cookie2, cookie3);
126
+ await assertHasCookies(cookie1, cookie2, cookie3);
130
127
 
131
- yield driver.manage().deleteCookie(cookie1.name);
132
- yield assertHasCookies(cookie2, cookie3);
128
+ await driver.manage().deleteCookie(cookie1.name);
129
+ await assertHasCookies(cookie2, cookie3);
133
130
  });
134
131
 
135
- test.it('can delete cookies set higher in the path', function*() {
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
- yield driver.get(childUrl);
142
- yield driver.manage().addCookie(cookie);
143
- yield assertHasCookies(cookie);
138
+ await driver.get(childUrl);
139
+ await driver.manage().addCookie(cookie);
140
+ await assertHasCookies(cookie);
144
141
 
145
- yield driver.get(grandchildUrl);
146
- yield assertHasCookies(cookie);
142
+ await driver.get(grandchildUrl);
143
+ await assertHasCookies(cookie);
147
144
 
148
- yield driver.manage().deleteCookie(cookie.name);
149
- yield assertHasCookies();
145
+ await driver.manage().deleteCookie(cookie.name);
146
+ await assertHasCookies();
150
147
 
151
- yield driver.get(childUrl);
152
- yield assertHasCookies();
148
+ await driver.get(childUrl);
149
+ await assertHasCookies();
153
150
  });
154
151
 
155
- test.ignore(env.browsers(
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
- yield driver.manage().addCookie(cookie);
166
- yield driver.manage().getCookie(cookie.name).then(function(actual) {
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
- // expiry times are exchanged in seconds since January 1, 1970 UTC.
169
- assert.equal(actual.expiry, Math.floor(expiry.getTime() / 1000));
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
- yield driver.sleep(expirationDelay);
173
- yield assertHasCookies();
186
+ await driver.sleep(expirationDelay);
187
+ await assertHasCookies();
174
188
  });
175
189
  });
176
190