selenium-webdriver 4.0.0 → 4.1.2

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 CHANGED
@@ -1,10 +1,54 @@
1
+ ## v4.1.2
2
+
3
+ * chore/connect to CDP based on ENV selenium address var (#10255)
4
+ * Add wheel support to actions
5
+ * add support for Chrome 98 and remove support for Chrome 95
6
+ * add deleteNetworkConditions for chromium (#10323)
7
+ * Add new pointer attributes to actions
8
+ * add support Chrome 99 and remove for Chrome 96
9
+ * sendKeys error message fixed
10
+ * add support Chrome 100 and remove for Chrome 97
11
+ * removing onQuit handler for chromedriver (#10499)
12
+ * Split String on grapheme pairs in sendKeys command (#10519)
13
+ * do not convert tag name to css selector
14
+ * docs: use Browser constants for browser name (#10567)
15
+
16
+ ## v4.1.1
17
+
18
+ * Add support for installing unpacked addons at runtime in Firefox webdriver (#10216)
19
+ * Enables firefox debugger for devtools test
20
+ * Sets correct browserName when set via SELENIUM_BROWSER fixes #10218
21
+ * add support for Chrome v97
22
+ * Adds new desktop cast command for Chromium #10190 (#10191)
23
+ * ignore errors arising from trying to use file detector fixes #6343
24
+ * Added RelativeBy class on the main api (#10148)
25
+ * Code cleanup and minor improvements
26
+ * Implements 'getDomAttribute' to get attribute value as defined by w3c spec and removes legacy command usages
27
+ * Remove legacy JWP support and w3c<boolean> switch (#10095)
28
+ * update map/filter clean up to common format (#10094)
29
+
30
+ ## v4.1.0
31
+
32
+ * add support for handling Shadow DOM elements
33
+ * Capture browser console logs when using BiDi onLogEvent api
34
+ * add CDP support for v96 and remove v93
35
+ * remove useless package, change io public api import to more common approach (#10037)
36
+ * Fix flaky CDP dom mutation (#10029)
37
+ * Fix edge test failures (#10012)
38
+ * code cleanup second iteration (#9979)
39
+ * Ensure correct serialization of extensions in chromium.Options (#6676)
40
+ * Remove explicit id passing for CDP commands
41
+ * Attach to page target while creating a CDP connection (#10005)
42
+ * Add support for form submit in W3C mode (fixes #9916) (#9936)
43
+ * Fixes relative locator 'locateWith' export
44
+ * update doc string for CDP Commands (#9929)
45
+
1
46
  ## v4.0.0
2
47
 
3
48
  * Fixes cdp for Chrome and Firefox (#9909)
4
49
  * Add cdp 95 to python and JS
5
50
  * Removing unused target for cdpConnection
6
51
 
7
-
8
52
  ## v4.0.0-rc-2
9
53
 
10
54
  * Fix builder test
@@ -26,15 +70,13 @@
26
70
  * Add default Opera capabilities. Fixes #9654
27
71
  * Add support for ChromeDriver `--enable-chrome-logs` (#9575) [Author: Mark Stacey]
28
72
 
29
- The `--enable-chrome-logs` ChromeDriver option can now be enabled using
30
- the Chromium (or Chrome) ServiceBuilder, similarly to the other options
31
- provided by ChromeDriver.
73
+ The `--enable-chrome-logs` ChromeDriver option can now be enabled using the Chromium (or Chrome)
74
+ ServiceBuilder, similarly to the other options provided by ChromeDriver.
32
75
 
33
76
  * Add the debuggerAddress option to chromium.js (#9561) [Author: Brandon Walderman]
34
77
  * Adds http client options (#9638)[Author: Dharin Shah]
35
78
  * Updating edge.js to extend chromium.driver (fixes #9626)
36
79
 
37
-
38
80
  ## v4.0.0-beta.4
39
81
 
40
82
  * Add windowTypes option support for ChromiumDriver (#7897)
@@ -42,14 +84,13 @@
42
84
 
43
85
  ## v4.0.0-beta.3
44
86
 
45
- * Removed support for legacy actions.
46
- This will also remove "Bride Mode" support, which was introduced to translate of action class to legacy API.
87
+ * Removed support for legacy actions. This will also remove "Bride Mode" support, which was
88
+ introduced to translate of action class to legacy API.
47
89
  * Remove devtools support for v86,v87 and adding support for v89, v90, v91
48
90
  * make isPromise() return boolean value for null and undefined cases (#6785)
49
91
  * code cleanup (#9158)
50
92
  * replacing asserts equal with strictEqual and deepEqual with deepStrictEqual
51
93
 
52
-
53
94
  ## v4.0.0-beta.2
54
95
 
55
96
  * Removed support for Edge legacy.
@@ -102,12 +143,11 @@
102
143
 
103
144
  * Removed BUILD.bazel files from the build artifact
104
145
 
105
-
106
146
  ## v4.0.0-alpha.3
107
147
 
108
148
  ### Notice
109
149
 
110
- * The minimum supported version of Node is now 10.15.0 LTS
150
+ * The minimum supported version of Node is now 10.15.0 LTS
111
151
 
112
152
  ### Changes
113
153
 
@@ -117,16 +157,15 @@
117
157
 
118
158
  ### API Changes
119
159
 
120
- * Export `lib/input.Origin` from the top level `selenium-webdriver` module.
121
- * HTTP requests from this library will now include a User-Agent of the form
122
- `selenium/${VERSION} (js ${PLATFORM})`.
123
-
160
+ * Export `lib/input.Origin` from the top level `selenium-webdriver` module.
161
+ * HTTP requests from this library will now include a User-Agent of the form
162
+ `selenium/${VERSION} (js ${PLATFORM})`.
124
163
 
125
164
  ## v4.0.0-alpha.1
126
165
 
127
166
  ### Notice
128
167
 
129
- * The minimum supported version of Node is now 8.9.0 LTS
168
+ * The minimum supported version of Node is now 8.9.0 LTS
130
169
 
131
170
  ### Changes to Supported Browsers
132
171
 
@@ -140,200 +179,192 @@ mode (see `example/headless.js`)
140
179
 
141
180
  ### Changes for W3C WebDriver Spec Compliance
142
181
 
143
- * Revamped the actions API to conform with the WebDriver Spec:
144
- <https://www.w3.org/TR/webdriver/#actions>. For details, refer to the JS doc
145
- on the `lib/input.Actions` class.
146
-
147
- As of January, 2018, only Firefox natively supports this new API. You can
148
- put the `Actions` class into "bridge mode" and it will attempt to translate
149
- mouse and keyboard actions to the legacy API (see class docs). Alternatively,
150
- you may continue to use the legacy API directly via the `lib/actions` module.
151
- __NOTE:__ The legacy API is considered strongly deprecated and will be
152
- removed in a minor release once Google's Chrome and Microsoft's Edge browsers
153
- support the new API.
154
-
155
- * All window manipulation commands are now supported.
156
- * Added `driver.switchTo().parentFrame()`
157
- * When a named cookie is requested, attempt to fetch it directly using the
158
- W3C endpoint, `GET /session/{session id}/cookie/{name}`. If this command is
159
- not recognized by the remote end, fallback to fetching all cookies and then
160
- searching for the desired name.
161
- * Replaced `WebElement.getSize()` and `WebElement.getLocation()` with a single
162
- method, `WebElement.getRect()`.
182
+ * Revamped the actions API to conform with the WebDriver Spec:
183
+ <https://www.w3.org/TR/webdriver/#actions>. For details, refer to the JS doc on
184
+ the `lib/input.Actions` class.
185
+
186
+ As of January, 2018, only Firefox natively supports this new API. You can put the `Actions` class
187
+ into "bridge mode" and it will attempt to translate mouse and keyboard actions to the legacy API (
188
+ see class docs). Alternatively, you may continue to use the legacy API directly via
189
+ the `lib/actions` module.
190
+ __NOTE:__ The legacy API is considered strongly deprecated and will be removed in a minor release
191
+ once Google's Chrome and Microsoft's Edge browsers support the new API.
192
+
193
+ * All window manipulation commands are now supported.
194
+ * Added `driver.switchTo().parentFrame()`
195
+ * When a named cookie is requested, attempt to fetch it directly using the W3C
196
+ endpoint, `GET /session/{session id}/cookie/{name}`. If this command is not recognized by the
197
+ remote end, fallback to fetching all cookies and then searching for the desired name.
198
+ * Replaced `WebElement.getSize()` and `WebElement.getLocation()` with a single
199
+ method, `WebElement.getRect()`.
163
200
 
164
201
  ### API Changes
165
202
 
166
- * The core WebDriver API no longer uses promise manager
167
- - Removed `index.Builder#setControlFlow()`
168
- - The following thenable types no longer have a `cancel()` method:
169
- - The dynamically generated thenable WebDrivers created by `index.Builder`
170
- - `lib/webdriver.AlertPromise`
171
- - `lib/webdriver.WebElementPromise`
172
- * Removed `remote/index.DriverService.prototype.stop()` (use `#kill()` instead)
173
- * Removed the `lib/actions` module
174
- * Removed the `lib/events` module
175
- * Removed the `phantomjs` module
176
- * Removed the 'opera' module
177
- * Removed the promise manager from `lib/promise`, which includes the removal
178
- of the following exported names (replacements, if any, in parentheses):
179
- - CancellableThenable
180
- - CancellationError
181
- - ControlFlow
182
- - Deferred
183
- - LONG_STACK_TRACES
184
- - MultipleUnhandledRejectionError
185
- - Promise (use native Promises)
186
- - Resolver
187
- - Scheduler
188
- - Thenable
189
- - USE_PROMISE_MANAGER
190
- - all (use Promise.all)
191
- - asap (use Promise.resolve)
192
- - captureStackTrace (use Error.captureStackTrace)
193
- - consume (use async functions)
194
- - controlFlow
195
- - createPromise (use new Promise)
196
- - defer
197
- - fulfilled (use Promise.resolve)
198
- - isGenerator
199
- - rejected (use Promise.reject)
200
- - setDefaultFlow
201
- - when (use Promise.resolve)
202
- * Changes to the `Builder` class:
203
- - Added setChromeService, setEdgeService, & setFirefoxService
204
- - Removed setEnableNativeEvents
205
- - Removed setScrollBehavior
206
- * Changes to `chrome.Driver`
207
- - Added sendDevToolsCommand
208
- - Added setDownloadPath
209
- * Changes to `chrome.Options`
210
- - Now extends the `Capabilities` class
211
- - Removed from/toCapabilities
212
- * Changes to `edge.Options`
213
- - Now extends the `Capabilities` class
214
- - Removed from/toCapabilities
215
- * Changes to `ie.Options`
216
- - Now extends the `Capabilities` class
217
- - Removed from/toCapabilities
218
- * Removed the `firefox.Binary` class. Custom binaries can still be selected
219
- using `firefox.Options#setBinary()`. Likewise, custom binary arguments can be
220
- specified with `firefox.Options#addArguments()`.
221
- * Changes to `firefox.Driver`
222
- - Added installAddon(path)
223
- - Added uninstallAddon(id)
224
- * Changes to `firefox.Options`
225
- - Now extends the `Capabilities` class
226
- - Removed from/toCapabilities
227
- - Removed setLoggingPreferences (was a no-op)
228
- - setProfile now only accepts a path to an existing profile
229
- - Added addExtensions
230
- - Added setPreference
231
- * Removed the `firefox.Profile` class. All of its functionality is now
232
- provided directly by `firefox.Options`
233
- * Removed the `firefox/binary` module
234
- * Removed the `firefox/profile` module
235
- * Changes to `safari.Options`
236
- - Now extends the `Capabilities` class
237
- - Removed from/toCapabilities
238
- - Removed setCleanSession (was a no-op)
239
- * Changes to `lib/capabilities.Browser`:
240
- - Removed several enum values.
241
- - ANDROID (use Chrome for Android; see docs on the chrome module)
242
- - IPAD (no support available)
243
- - IPHONE (no support available)
244
- - OPERA (use Chrome)
245
- - PHANTOM_JS (use Chrome or Firefox in headless mode)
246
- - HTMLUNIT (use Chrome or Firefox in headless mode)
247
- * Changes to `lib/capabilities.Capabilities`:
248
- - Removed static factory methods android(), ipad(), iphone(), opera(),
249
- phantomjs(), htmlunit(), and htmlunitwithjs(). Users can still manually
250
- configure capabilities for these, but their use is not recommended and
251
- they will no longer be surfaced in the API.
252
- * Changes to `lib/error`:
253
- - Added
254
- - ElementClickInterceptedError
255
- - InsecureCertificateError
256
- - InvalidCoordinatesError
257
- - NoSuchCookieError
258
- - Removed
259
- - ElementNotVisibleError
260
- - InvalidElementCoordinatesError
261
- * Changes to `lib/webdriver.WebDriver`:
262
- - Dropped support for "requiredCapabilities" from WebDriver.createSession
263
- - actions() now returns the new `lib/input.Actions` class
264
- - Removed touchActions
265
- - Renamed schedule to execute
266
- - Removed the `WebDriver.attachToSession()` factory method. Users can just
267
- the `WebDriver` constructor directly instead.
268
- - Removed the `call()` method. This was used to inject custom function calls
269
- into the control flow. Now that the promise manager is no longer used,
270
- this method is no longer necessary. Users are now responsible for
271
- coordinating actions (ideally with async functions) and can just call
272
- functions directly instead of through `driver.call()`.
273
- * Changes to `lib/webdriver.WebElement`:
274
- - Replaced getSize & getLocation with getRect
275
- * Changes to `lib/webdriver.Alert`:
276
- - Removed authenticateAs
277
- * Changes to `lib/webdriver.Options` (`driver.manage()`):
278
- - Removed timeouts (use get/setTimeouts)
279
- * Changes to `lib/webdriver.Window` (`driver.manage().window()`):
280
- - Added
281
- - getRect
282
- - setRect
283
- - fullscreen
284
- - minimize
285
- - Removed (use the getRect/setRect methods)
286
- - getPosition
287
- - setPosition
288
- - getSize
289
- - setSize
290
- * Removed the `testing/assert` module
291
- * Changes to `testing/index`
292
- - Since the promise manager has been removed, it is no longer necessary to
293
- wrap the Mocha test hooks; instead, users can simply use async functions.
294
- The following have all been removed:
295
- - describe
296
- - before
297
- - beforeEach
298
- - after
299
- - afterEach
300
- - it
301
- - Added the `suite` function. For details, refer to the jsdoc or
203
+ * The core WebDriver API no longer uses promise manager
204
+ - Removed `index.Builder#setControlFlow()`
205
+ - The following thenable types no longer have a `cancel()` method:
206
+ - The dynamically generated thenable WebDrivers created by `index.Builder`
207
+ - `lib/webdriver.AlertPromise`
208
+ - `lib/webdriver.WebElementPromise`
209
+ * Removed `remote/index.DriverService.prototype.stop()` (use `#kill()` instead)
210
+ * Removed the `lib/actions` module
211
+ * Removed the `lib/events` module
212
+ * Removed the `phantomjs` module
213
+ * Removed the 'opera' module
214
+ * Removed the promise manager from `lib/promise`, which includes the removal of the following
215
+ exported names (replacements, if any, in parentheses):
216
+ - CancellableThenable
217
+ - CancellationError
218
+ - ControlFlow
219
+ - Deferred
220
+ - LONG_STACK_TRACES
221
+ - MultipleUnhandledRejectionError
222
+ - Promise (use native Promises)
223
+ - Resolver
224
+ - Scheduler
225
+ - Thenable
226
+ - USE_PROMISE_MANAGER
227
+ - all (use Promise.all)
228
+ - asap (use Promise.resolve)
229
+ - captureStackTrace (use Error.captureStackTrace)
230
+ - consume (use async functions)
231
+ - controlFlow
232
+ - createPromise (use new Promise)
233
+ - defer
234
+ - fulfilled (use Promise.resolve)
235
+ - isGenerator
236
+ - rejected (use Promise.reject)
237
+ - setDefaultFlow
238
+ - when (use Promise.resolve)
239
+ * Changes to the `Builder` class:
240
+ - Added setChromeService, setEdgeService, & setFirefoxService
241
+ - Removed setEnableNativeEvents
242
+ - Removed setScrollBehavior
243
+ * Changes to `chrome.Driver`
244
+ - Added sendDevToolsCommand
245
+ - Added setDownloadPath
246
+ * Changes to `chrome.Options`
247
+ - Now extends the `Capabilities` class
248
+ - Removed from/toCapabilities
249
+ * Changes to `edge.Options`
250
+ - Now extends the `Capabilities` class
251
+ - Removed from/toCapabilities
252
+ * Changes to `ie.Options`
253
+ - Now extends the `Capabilities` class
254
+ - Removed from/toCapabilities
255
+ * Removed the `firefox.Binary` class. Custom binaries can still be selected
256
+ using `firefox.Options#setBinary()`. Likewise, custom binary arguments can be specified
257
+ with `firefox.Options#addArguments()`.
258
+ * Changes to `firefox.Driver`
259
+ - Added installAddon(path)
260
+ - Added uninstallAddon(id)
261
+ * Changes to `firefox.Options`
262
+ - Now extends the `Capabilities` class
263
+ - Removed from/toCapabilities
264
+ - Removed setLoggingPreferences (was a no-op)
265
+ - setProfile now only accepts a path to an existing profile
266
+ - Added addExtensions
267
+ - Added setPreference
268
+ * Removed the `firefox.Profile` class. All of its functionality is now provided directly
269
+ by `firefox.Options`
270
+ * Removed the `firefox/binary` module
271
+ * Removed the `firefox/profile` module
272
+ * Changes to `safari.Options`
273
+ - Now extends the `Capabilities` class
274
+ - Removed from/toCapabilities
275
+ - Removed setCleanSession (was a no-op)
276
+ * Changes to `lib/capabilities.Browser`:
277
+ - Removed several enum values.
278
+ - ANDROID (use Chrome for Android; see docs on the chrome module)
279
+ - IPAD (no support available)
280
+ - IPHONE (no support available)
281
+ - OPERA (use Chrome)
282
+ - PHANTOM_JS (use Chrome or Firefox in headless mode)
283
+ - HTMLUNIT (use Chrome or Firefox in headless mode)
284
+ * Changes to `lib/capabilities.Capabilities`:
285
+ - Removed static factory methods android(), ipad(), iphone(), opera(), phantomjs(), htmlunit(),
286
+ and htmlunitwithjs(). Users can still manually configure capabilities for these, but their use
287
+ is not recommended and they will no longer be surfaced in the API.
288
+ * Changes to `lib/error`:
289
+ - Added
290
+ - ElementClickInterceptedError
291
+ - InsecureCertificateError
292
+ - InvalidCoordinatesError
293
+ - NoSuchCookieError
294
+ - Removed
295
+ - ElementNotVisibleError
296
+ - InvalidElementCoordinatesError
297
+ * Changes to `lib/webdriver.WebDriver`:
298
+ - Dropped support for "requiredCapabilities" from WebDriver.createSession
299
+ - actions() now returns the new `lib/input.Actions` class
300
+ - Removed touchActions
301
+ - Renamed schedule to execute
302
+ - Removed the `WebDriver.attachToSession()` factory method. Users can just the `WebDriver`
303
+ constructor directly instead.
304
+ - Removed the `call()` method. This was used to inject custom function calls into the control
305
+ flow. Now that the promise manager is no longer used, this method is no longer necessary.
306
+ Users are now responsible for coordinating actions (ideally with async functions) and can just
307
+ call functions directly instead of through `driver.call()`.
308
+ * Changes to `lib/webdriver.WebElement`:
309
+ - Replaced getSize & getLocation with getRect
310
+ * Changes to `lib/webdriver.Alert`:
311
+ - Removed authenticateAs
312
+ * Changes to `lib/webdriver.Options` (`driver.manage()`):
313
+ - Removed timeouts (use get/setTimeouts)
314
+ * Changes to `lib/webdriver.Window` (`driver.manage().window()`):
315
+ - Added
316
+ - getRect
317
+ - setRect
318
+ - fullscreen
319
+ - minimize
320
+ - Removed (use the getRect/setRect methods)
321
+ - getPosition
322
+ - setPosition
323
+ - getSize
324
+ - setSize
325
+ * Removed the `testing/assert` module
326
+ * Changes to `testing/index`
327
+ - Since the promise manager has been removed, it is no longer necessary to wrap the Mocha test
328
+ hooks; instead, users can simply use async functions. The following have all been removed:
329
+ - describe
330
+ - before
331
+ - beforeEach
332
+ - after
333
+ - afterEach
334
+ - it
335
+ - Added the `suite` function. For details, refer to the jsdoc or
302
336
  `example/google_search_test.js`
303
337
 
304
-
305
-
306
338
  ## v3.6.0
307
339
 
308
340
  ### Bug Fixes
309
341
 
310
342
  * The Capabilities factory methods should only specify the name of the browser.
311
- * Protect against the remote end sometimes not returning a list to findElements
312
- commands.
343
+ * Protect against the remote end sometimes not returning a list to findElements commands.
313
344
  * Properly reset state in `remote.DriverService#kill()`
314
- * The firefox module will no longer apply the preferences required by the legacy
315
- FirefoxDriver. These preferences were only required when using the legacy
316
- driver, support for which was dropped in v3.5.0.
345
+ * The firefox module will no longer apply the preferences required by the legacy FirefoxDriver.
346
+ These preferences were only required when using the legacy driver, support for which was dropped
347
+ in v3.5.0.
317
348
 
318
349
  ### API Changes
319
350
 
320
351
  * Added new methods to `selenium-webdriver/firefox.Options`:
321
- - addArguments()
322
- - headless()
323
- - windowSize()
352
+ - addArguments()
353
+ - headless()
354
+ - windowSize()
324
355
  * Deprecated `selenium-webdriver/firefox/binary.Binary`
325
356
  * Removed `selenium-webdriver/firefox.Options#useGeckoDriver()`
326
357
  * Removed the unused `selenium-webdriver/firefox/profile.decode()`
327
- * Removed methods from `selenium-webdriver/firefox/profile.Profile` that had
328
- no effect since support for the legacy FirefoxDriver was dropped in 3.5.0:
329
- - setNativeEventsEnabled
330
- - nativeEventsEnabled
331
- - getPort
332
- - setPort
333
- * Removed `selenium-webdriver/firefox.ServiceBuilder#setFirefoxBinary()`; custom
334
- binaries should be configured through the `firefox.Options` class.
335
- * Removed `selenium-webdriver/firefox.Capability`. These hold overs from the
336
- legacy FirefoxDriver are no longer supported.
358
+ * Removed methods from `selenium-webdriver/firefox/profile.Profile` that had no effect since support
359
+ for the legacy FirefoxDriver was dropped in 3.5.0:
360
+ - setNativeEventsEnabled
361
+ - nativeEventsEnabled
362
+ - getPort
363
+ - setPort
364
+ * Removed `selenium-webdriver/firefox.ServiceBuilder#setFirefoxBinary()`; custom binaries should be
365
+ configured through the `firefox.Options` class.
366
+ * Removed `selenium-webdriver/firefox.Capability`. These hold overs from the legacy FirefoxDriver
367
+ are no longer supported.
337
368
 
338
369
  ### Changes for W3C WebDriver Spec Compliance
339
370
 
@@ -341,7 +372,6 @@ mode (see `example/headless.js`)
341
372
  `error.ElementNotInteractableError`.
342
373
  * Support the `httpOnly` option when adding a cookie.
343
374
 
344
-
345
375
  ## v3.5.0
346
376
 
347
377
  ### Notice
@@ -352,23 +382,20 @@ to a remote Selenium server that supports Firefox 45.
352
382
  ### Changes
353
383
 
354
384
  * Removed native support for Firefox 46 and older.
355
- - The `SELENIUM_MARIONETTE` enviornment variable no longer has an effect.
356
- - `selenium-webdriver/firefox.Capability.MARIONETTE` is deprecated.
357
- - `selenium-webdriver/firefox.Options#useGeckoDriver()` is deprecated and now a no-op.
358
- * `firefox.Options` will no longer discard the `"moz:firefoxOptions"` set in
359
- user provided capabilities (via `Builder.withCapabilities({})`). When both
360
- are used, the settings in `firefox.Options` will be applied _last_.
361
- * Added `chrome.Options#headless()` and `chrome.Options#windowSize()`, which
362
- may be used to start Chrome in headless mode (requires Chrome 59+) and to set
363
- the initial window size, respectively.
364
-
385
+ - The `SELENIUM_MARIONETTE` enviornment variable no longer has an effect.
386
+ - `selenium-webdriver/firefox.Capability.MARIONETTE` is deprecated.
387
+ - `selenium-webdriver/firefox.Options#useGeckoDriver()` is deprecated and now a no-op.
388
+ * `firefox.Options` will no longer discard the `"moz:firefoxOptions"` set in user provided
389
+ capabilities (via `Builder.withCapabilities({})`). When both are used, the settings
390
+ in `firefox.Options` will be applied _last_.
391
+ * Added `chrome.Options#headless()` and `chrome.Options#windowSize()`, which may be used to start
392
+ Chrome in headless mode (requires Chrome 59+) and to set the initial window size, respectively.
365
393
 
366
394
  ### Changes for W3C WebDriver Spec Compliance
367
395
 
368
- * Added `error.WebDriverError#remoteStacktrace` to capture the stacktrace
369
- reported by a remote WebDriver endpoint (if any).
370
- * Fixed `WebElement#sendKeys` to send text as a string instead of an array of
371
- strings.
396
+ * Added `error.WebDriverError#remoteStacktrace` to capture the stacktrace reported by a remote
397
+ WebDriver endpoint (if any).
398
+ * Fixed `WebElement#sendKeys` to send text as a string instead of an array of strings.
372
399
 
373
400
  ## v3.4.0
374
401
 
@@ -378,28 +405,25 @@ This release requires [geckodriver 0.15.0](https://github.com/mozilla/geckodrive
378
405
 
379
406
  ### API Changes
380
407
 
381
- * Added `Options#getTimeouts()` for retrieving the currently configured session
382
- timeouts (i.e. implicit wait). This method will only work with W3C compatible
383
- WebDriver implementations.
384
- * Deprecated the `Timeouts` class in favor of `Options#setTimeouts()`, which
385
- supports setting multiple timeouts at once.
408
+ * Added `Options#getTimeouts()` for retrieving the currently configured session timeouts (i.e.
409
+ implicit wait). This method will only work with W3C compatible WebDriver implementations.
410
+ * Deprecated the `Timeouts` class in favor of `Options#setTimeouts()`, which supports setting
411
+ multiple timeouts at once.
386
412
  * Added support for emulating different network conditions (e.g., offline, 2G, WiFi) on Chrome.
387
413
 
388
414
  ### Changes for W3C WebDriver Spec Compliance
389
415
 
390
- * Fixed W3C response parsing, which expects response data to always be a JSON
391
- object with a `value` key.
416
+ * Fixed W3C response parsing, which expects response data to always be a JSON object with a `value`
417
+ key.
392
418
  * Added W3C endpoints for interacting with various types of
393
419
  [user prompts](https://w3c.github.io/webdriver/webdriver-spec.html#user-prompts).
394
420
  * Added W3C endpoints for remotely executing scripts.
395
421
  * Added W3C endpoints to get current window handle and all windows handles.
396
422
 
397
-
398
423
  ## v3.3.0
399
424
 
400
- * Added warning log messages when the user creates new managed promises, or
401
- schedules unchained tasks. Users may opt in to printing these log messages
402
- with
425
+ * Added warning log messages when the user creates new managed promises, or schedules unchained
426
+ tasks. Users may opt in to printing these log messages with
403
427
 
404
428
  ```js
405
429
  const {logging} = require('selenium-webdriver');
@@ -408,115 +432,103 @@ This release requires [geckodriver 0.15.0](https://github.com/mozilla/geckodrive
408
432
  ```
409
433
  * If the `JAVA_HOME` environment variable is set, use it to locate java.exe.
410
434
 
411
-
412
435
  ## v3.2.0
413
436
 
414
437
  * Release skipped to stay in sync with the main Selenium project.
415
438
 
416
-
417
439
  ## v3.1.0
418
440
 
419
441
  * The `lib` package is once again platform agnostic (excluding `lib/devmode`).
420
442
  * Deprecated `promise.when(value, callback, errback)`.
421
443
  Use `promise.fulfilled(value).then(callback, errback)`
422
444
  * Changed `promise.fulfilled(value)`, `promise.rejected(reason)` and
423
- `promise.defer()` to all use native promises when the promise manager is
424
- disabled.
445
+ `promise.defer()` to all use native promises when the promise manager is disabled.
425
446
  * Properly handle W3C error responses to new session commands.
426
447
  * Updated `selenium-webdriver/testing` to export `describe.only` along with
427
448
  `describe.skip`.
428
- * Fixed `selenium-webdriver/lib/until.ableToSwitchToFrame`. It was previously
429
- dropping arguments and would never work.
449
+ * Fixed `selenium-webdriver/lib/until.ableToSwitchToFrame`. It was previously dropping arguments and
450
+ would never work.
430
451
  * Added the ability to use Firefox Nightly
431
452
  * If Firefox cannot be found in the default location, look for it on the PATH
432
453
  * Allow SafariDriver to use Safari Technology Preview.
433
- * Use the proper wire command for WebElement.getLocation() and
434
- WebElement.getSize() for W3C compliant drivers.
435
-
454
+ * Use the proper wire command for WebElement.getLocation() and WebElement.getSize() for W3C
455
+ compliant drivers.
436
456
 
437
457
  ## v3.0.1
438
458
 
439
459
  * More API adjustments to align with native Promises
440
- - Deprecated `promise.fulfilled(value)`, use `promise.Promise#resolve(value)`
441
- - Deprecated `promise.rejected(reason)`, use `promise.Promise#reject(reason)`
442
- * When a `wait()` condition times out, the returned promise will now be
443
- rejected with an `error.TimeoutError` instead of a generic `Error` object.
444
- * `WebDriver#wait()` will now throw a TypeError if an invalid wait condition is
445
- provided.
446
- * Properly catch unhandled promise rejections with an action sequence (only
447
- impacts when the promise manager is disabled).
448
-
460
+ - Deprecated `promise.fulfilled(value)`, use `promise.Promise#resolve(value)`
461
+ - Deprecated `promise.rejected(reason)`, use `promise.Promise#reject(reason)`
462
+ * When a `wait()` condition times out, the returned promise will now be rejected with
463
+ an `error.TimeoutError` instead of a generic `Error` object.
464
+ * `WebDriver#wait()` will now throw a TypeError if an invalid wait condition is provided.
465
+ * Properly catch unhandled promise rejections with an action sequence (only impacts when the promise
466
+ manager is disabled).
449
467
 
450
468
  ## v3.0.0
451
469
 
452
470
  * (__NOTICE__) The minimum supported version of Node is now 6.9.0 LTS
453
- * Removed support for the SafariDriver browser extension. This has been
454
- replaced by Apple's safaridriver, which is included wtih Safari 10
471
+ * Removed support for the SafariDriver browser extension. This has been replaced by Apple's
472
+ safaridriver, which is included wtih Safari 10
455
473
  (available on OS X El Capitan and macOS Sierra).
456
474
 
457
475
  To use Safari 9 or older, users will have to use an older version of Selenium.
458
476
 
459
477
  * geckodriver v0.11.0 or newer is now required for Firefox.
460
- * Fixed potential reference errors in `selenium-webdriver/testing` when users
461
- create a cycle with mocha by running with mocha's `--hook` flag.
462
- * Fixed `WebDriver.switchTo().activeElement()` to use the correct HTTP method
463
- for compatibility with the W3C spec.
478
+ * Fixed potential reference errors in `selenium-webdriver/testing` when users create a cycle with
479
+ mocha by running with mocha's `--hook` flag.
480
+ * Fixed `WebDriver.switchTo().activeElement()` to use the correct HTTP method for compatibility with
481
+ the W3C spec.
464
482
  * Update the `selenium-webdriver/firefox` module to use geckodriver's
465
483
  "moz:firefoxOptions" dictionary for Firefox-specific configuration values.
466
- * Extending the `selenium-webdriver/testing` module to support tests defined
467
- using generator functions.
484
+ * Extending the `selenium-webdriver/testing` module to support tests defined using generator
485
+ functions.
468
486
  * The promise manager can be disabled by setting an enviornment variable:
469
- `SELENIUM_PROMISE_MANAGER=0`. This is part of a larger plan to remove the
470
- promise manager, as documented at
487
+ `SELENIUM_PROMISE_MANAGER=0`. This is part of a larger plan to remove the promise manager, as
488
+ documented at
471
489
  <https://github.com/SeleniumHQ/selenium/issues/2969>
472
490
  * When communicating with a W3C-compliant remote end, use the atoms library for
473
- the `WebElement.getAttribute()` and `WebElement.isDisplayed()` commands. This
474
- behavior is consistent with the java, .net, python, and ruby clients.
475
-
491
+ the `WebElement.getAttribute()` and `WebElement.isDisplayed()` commands. This behavior is
492
+ consistent with the java, .net, python, and ruby clients.
476
493
 
477
494
  ### API Changes
478
495
 
479
- * Removed `safari.Options#useLegacyDriver()`
480
- * Reduced the API on `promise.Thenable` for compatibility with native promises:
481
- - Removed `#isPending()`
482
- - Removed `#cancel()`
483
- - Removed `#finally()`
484
- * Changed all subclasses of `webdriver.WebDriver` to overload the static
485
- function `WebDriver.createSession()` instead of doing work in the
486
- constructor. All constructors now inherit the base class' function signature.
487
- Users are still encouraged to use the `Builder` class instead of creating
488
- drivers directly.
489
- * `Builder#build()` now returns a "thenable" WebDriver instance, allowing users
490
- to immediately schedule commands (as before), or issue them through standard
491
- promise callbacks. This is the same pattern already employed for WebElements.
492
- * Removed `Builder#buildAsync()` as it was redundant with the new semantics of
493
- `build()`.
494
-
495
-
496
+ * Removed `safari.Options#useLegacyDriver()`
497
+ * Reduced the API on `promise.Thenable` for compatibility with native promises:
498
+ - Removed `#isPending()`
499
+ - Removed `#cancel()`
500
+ - Removed `#finally()`
501
+ * Changed all subclasses of `webdriver.WebDriver` to overload the static
502
+ function `WebDriver.createSession()` instead of doing work in the constructor. All constructors
503
+ now inherit the base class' function signature. Users are still encouraged to use the `Builder`
504
+ class instead of creating drivers directly.
505
+ * `Builder#build()` now returns a "thenable" WebDriver instance, allowing users to immediately
506
+ schedule commands (as before), or issue them through standard promise callbacks. This is the same
507
+ pattern already employed for WebElements.
508
+ * Removed `Builder#buildAsync()` as it was redundant with the new semantics of
509
+ `build()`.
496
510
 
497
511
  ## v3.0.0-beta-3
498
512
 
499
- * Fixed a bug where the promise manager would silently drop callbacks after
500
- recovering from an unhandled promise rejection.
501
- * Added the `firefox.ServiceBuilder` class, which may be used to customize the
502
- geckodriver used for `firefox.Driver` instances.
503
- * Added support for Safari 10 safaridriver. safaridriver may be disabled
504
- via tha API, `safari.Options#useLegacyDriver`, to use the safari
505
- extension driver.
513
+ * Fixed a bug where the promise manager would silently drop callbacks after recovering from an
514
+ unhandled promise rejection.
515
+ * Added the `firefox.ServiceBuilder` class, which may be used to customize the geckodriver used
516
+ for `firefox.Driver` instances.
517
+ * Added support for Safari 10 safaridriver. safaridriver may be disabled via tha
518
+ API, `safari.Options#useLegacyDriver`, to use the safari extension driver.
506
519
  * Updated the `lib/proxy` module to support configuring a SOCKS proxy.
507
- * For the `promise.ControlFlow`, fire the "uncaughtException" event in a new
508
- turn of the JS event loop. As a result of this change, any errors thrown by
509
- an event listener will propagate to the global error handler. Previously,
510
- this event was fired with in the context of a (native) promise callback,
511
- causing errors to be silently suppressed in the promise chain.
520
+ * For the `promise.ControlFlow`, fire the "uncaughtException" event in a new turn of the JS event
521
+ loop. As a result of this change, any errors thrown by an event listener will propagate to the
522
+ global error handler. Previously, this event was fired with in the context of a (native) promise
523
+ callback, causing errors to be silently suppressed in the promise chain.
512
524
 
513
525
  ### API Changes
514
526
 
515
- * Added `remote.DriverService.Builder` as a base class for configuring
516
- DriverService instances that run in a child-process. The
527
+ * Added `remote.DriverService.Builder` as a base class for configuring DriverService instances that
528
+ run in a child-process. The
517
529
  `chrome.ServiceBuilder`, `edge.ServiceBuilder`, and `opera.ServiceBuilder`
518
530
  classes now all extend this base class with browser-specific options.
519
- * For each of the ServiceBuilder clases, renamed `usingPort` and
531
+ * For each of the ServiceBuilder classes, renamed `usingPort` and
520
532
  `withEnvironment` to `setPort` and `setEnvironment`, respectively.
521
533
  * Renamed `chrome.ServiceBuilder#setUrlBasePath` to `#setPath`
522
534
  * Changed the signature of the `firefox.Driver` from `(config, flow, executor)`
@@ -525,144 +537,129 @@ This release requires [geckodriver 0.15.0](https://github.com/mozilla/geckodrive
525
537
  `selenium-webdriver` module (these were previously only available from
526
538
  `lib/webdriver`).
527
539
 
528
-
529
540
  ### Changes for W3C WebDriver Spec Compliance
530
541
 
531
542
  * Updated command mappings for [getting](https://w3c.github.io/webdriver/webdriver-spec.html#get-window-position)
532
543
  and [setting](https://w3c.github.io/webdriver/webdriver-spec.html#set-window-position)
533
544
  the window position.
534
545
 
535
-
536
546
  ## v3.0.0-beta-2
537
547
 
538
548
  ### API Changes
539
549
 
540
550
  * Moved the `builder.Builder` class into the main module (`selenium-webdriver`).
541
551
  * Removed the `builder` module.
542
- * Fix `webdriver.WebDriver#setFileDetector` when driving Chrome or Firefox on a
543
- remote machine.
544
-
552
+ * Fix `webdriver.WebDriver#setFileDetector` when driving Chrome or Firefox on a remote machine.
545
553
 
546
554
  ## v3.0.0-beta-1
547
555
 
548
556
  * Allow users to set the agent used for HTTP connections through
549
- `builder.Builder#usingHttpAgent()`
557
+ `builder.Builder#usingHttpAgent()`
550
558
  * Added new wait conditions: `until.urlIs()`, `until.urlContains()`,
551
- `until.urlMatches()`
559
+ `until.urlMatches()`
552
560
  * Added work around for [GeckoDriver bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1274924)
553
- raising a type conversion error
561
+ raising a type conversion error
554
562
  * Internal cleanup replacing uses of managed promises with native promises
555
563
  * Removed the mandatory use of Firefox Dev Edition, when using Marionette driver
556
564
  * Fixed timeouts' URL
557
565
  * Properly send HTTP requests when using a WebDriver server proxy
558
566
  * Properly configure proxies when using the geckodriver
559
- * `http.Executor` now accepts a promised client. The `builder.Builder` class
560
- will now use this instead of a `command.DeferredExecutor` when creating
561
- WebDriver instances.
567
+ * `http.Executor` now accepts a promised client. The `builder.Builder` class will now use this
568
+ instead of a `command.DeferredExecutor` when creating WebDriver instances.
562
569
  * For Chrome and Firefox, the `builder.Builder` class will always return an
563
- instanceof `chrome.Driver` and `firefox.Driver`, respectively, even when
564
- configured to use a remote server (from `builder.Builder#usingServer(url)`,
570
+ instanceof `chrome.Driver` and `firefox.Driver`, respectively, even when configured to use a
571
+ remote server (from `builder.Builder#usingServer(url)`,
565
572
  `SELENIUM_REMOTE_URL`, etc).
566
573
 
567
574
  ### API Changes
568
575
 
569
576
  * `promise.Deferred` is no longer a thenable object.
570
- * `Options#addCookie()` now takes a record object instead of 7 individual
571
- parameters. A TypeError will be thrown if addCookie() is called with invalid
572
- arguments.
577
+ * `Options#addCookie()` now takes a record object instead of 7 individual parameters. A TypeError
578
+ will be thrown if addCookie() is called with invalid arguments.
573
579
  * When adding cookies, the desired expiry must be provided as a Date or in
574
- _seconds_ since epoch. When retrieving cookies, the expiration is always
575
- returned in seconds.
580
+ _seconds_ since epoch. When retrieving cookies, the expiration is always returned in seconds.
576
581
  * Renamed `firefox.Options#useMarionette` to `firefox.Options#useGeckoDriver`
577
582
  * Removed deprecated modules:
578
- - `selenium-webdriver/error` (use `selenium-webdriver/lib/error`,\
579
- or the `error` property exported by `selenium-webdriver`)
580
- - `selenium-webdriver/executors` — this was not previously deprecated, but
581
- is no longer used.
583
+ - `selenium-webdriver/error` (use `selenium-webdriver/lib/error`,\
584
+ or the `error` property exported by `selenium-webdriver`)
585
+ - `selenium-webdriver/executors` — this was not previously deprecated, but is no longer used.
582
586
  * Removed deprecated types:
583
- - `command.DeferredExecutor` — this was not previously deprecated, but is no
584
- longer used. It can be trivially implemented by clients should it be
585
- needed.
586
- - `error.InvalidSessionIdError` (use `error.NoSuchSessionError`)
587
- - `executors.DeferredExecutor`
588
- - `until.Condition` (use `webdriver.Condition`)
589
- - `until.WebElementCondition` (use `webdriver.WebElementCondition`)
590
- - `webdriver.UnhandledAlertError` (use `error.UnexpectedAlertOpenError`)
587
+ - `command.DeferredExecutor` — this was not previously deprecated, but is no longer used. It can
588
+ be trivially implemented by clients should it be needed.
589
+ - `error.InvalidSessionIdError` (use `error.NoSuchSessionError`)
590
+ - `executors.DeferredExecutor`
591
+ - `until.Condition` (use `webdriver.Condition`)
592
+ - `until.WebElementCondition` (use `webdriver.WebElementCondition`)
593
+ - `webdriver.UnhandledAlertError` (use `error.UnexpectedAlertOpenError`)
591
594
  * Removed deprecated functions:
592
- - `Deferred#cancel()`
593
- - `Deferred#catch()`
594
- - `Deferred#finally()`
595
- - `Deferred#isPending()`
596
- - `Deferred#then()`
597
- - `Promise#thenCatch()`
598
- - `Promise#thenFinally()`
599
- - `WebDriver#isElementPresent()`
600
- - `WebElement#getInnerHtml()`
601
- - `WebElement#getOuterHtml()`
602
- - `WebElement#getRawId()`
603
- - `WebElement#isElementPresent()`
595
+ - `Deferred#cancel()`
596
+ - `Deferred#catch()`
597
+ - `Deferred#finally()`
598
+ - `Deferred#isPending()`
599
+ - `Deferred#then()`
600
+ - `Promise#thenCatch()`
601
+ - `Promise#thenFinally()`
602
+ - `WebDriver#isElementPresent()`
603
+ - `WebElement#getInnerHtml()`
604
+ - `WebElement#getOuterHtml()`
605
+ - `WebElement#getRawId()`
606
+ - `WebElement#isElementPresent()`
604
607
  * Removed deprecated properties:
605
- - `WebDriverError#code`
606
-
608
+ - `WebDriverError#code`
607
609
 
608
610
  ## v2.53.2
609
611
 
610
- * Changed `io.exists()` to return a rejected promise if the input path is not
611
- a string
612
- * Deprecated `Promise#thenFinally()` - use `Promise#finally()`. The thenFinally
613
- shim added to the promise module in v2.53.0 will be removed in v3.0
614
- Sorry for the churn!
615
- * FIXED: capabilities serialization now properly handles undefined vs.
616
- false-like values.
612
+ * Changed `io.exists()` to return a rejected promise if the input path is not a string
613
+ * Deprecated `Promise#thenFinally()` - use `Promise#finally()`. The thenFinally shim added to the
614
+ promise module in v2.53.0 will be removed in v3.0 Sorry for the churn!
615
+ * FIXED: capabilities serialization now properly handles undefined vs. false-like values.
617
616
  * FIXED: properly handle responses from the remote end in
618
- `WebDriver.attachToSession`
617
+ `WebDriver.attachToSession`
619
618
 
620
619
  ## v2.53.1
621
620
 
622
621
  * FIXED: for consistency with the other language bindings, `remote.FileDetector`
623
- will ignore paths that refer to a directory.
622
+ will ignore paths that refer to a directory.
624
623
 
625
624
  ## v2.53.0
626
625
 
627
626
  ### Change Summary
628
627
 
629
- * Added preliminary support for Marionette, Mozilla's WebDriver implementation
630
- for Firefox. Marionette may be enabled via the API,
631
- `firefox.Options#useMarionette`, or by setting the `SELENIUM_MARIONETTE`
632
- environment variable.
633
- * Moved all logic for parsing and interpreting responses from the remote end
634
- into the individual `command.Executor` implementations.
628
+ * Added preliminary support for Marionette, Mozilla's WebDriver implementation for Firefox.
629
+ Marionette may be enabled via the API,
630
+ `firefox.Options#useMarionette`, or by setting the `SELENIUM_MARIONETTE`
631
+ environment variable.
632
+ * Moved all logic for parsing and interpreting responses from the remote end into the
633
+ individual `command.Executor` implementations.
635
634
  * For consistency with the other Selenium language bindings,
636
- `WebDriver#isElementPresent()` and `WebElement#isElementPresent()` have
637
- been deprecated. These methods will be removed in v3.0. Use the findElements
638
- command to test for the presence of an element:
635
+ `WebDriver#isElementPresent()` and `WebElement#isElementPresent()` have been deprecated. These
636
+ methods will be removed in v3.0. Use the findElements command to test for the presence of an
637
+ element:
639
638
 
640
639
  driver.findElements(By.css('.foo')).then(found => !!found.length);
641
640
  * Added support for W3C-spec compliant servers.
642
641
  * For consistent naming, deprecating `error.InvalidSessionIdError` in favor of
643
- `error.NoSuchSessionError`.
644
- * Moved the `error` module to `lib/error` so all core modules are co-located.
645
- The top-level `error` module will be removed in v3.0.
646
- * Moved `until.Condition` and `until.WebElementCondition` to the webdriver
647
- module to break a circular dependency.
648
- * Added support for setting the username and password in basic auth pop-up
649
- dialogs (currently IE only).
642
+ `error.NoSuchSessionError`.
643
+ * Moved the `error` module to `lib/error` so all core modules are co-located. The top-level `error`
644
+ module will be removed in v3.0.
645
+ * Moved `until.Condition` and `until.WebElementCondition` to the webdriver module to break a
646
+ circular dependency.
647
+ * Added support for setting the username and password in basic auth pop-up dialogs (currently IE
648
+ only).
650
649
  * Deprecated `WebElement#getInnerHtml()` and `WebEleemnt#getOuterHtml()`
651
650
  * Deprecated `Promise#thenCatch()` - use `Promise#catch()` instead
652
651
  * Deprecated `Promise#thenFinally()` - use `promise.thenFinally()` instead
653
- * FIXED: `io.findInPath()` will no longer match against directories that have
654
- the same basename as the target file.
655
- * FIXED: `phantomjs.Driver` now takes a third argument that defines the path to
656
- a log file to use for the phantomjs executable's output. This may be quickly
657
- set at runtime with the `SELENIUM_PHANTOMJS_LOG` environment variable.
652
+ * FIXED: `io.findInPath()` will no longer match against directories that have the same basename as
653
+ the target file.
654
+ * FIXED: `phantomjs.Driver` now takes a third argument that defines the path to a log file to use
655
+ for the phantomjs executable's output. This may be quickly set at runtime with
656
+ the `SELENIUM_PHANTOMJS_LOG` environment variable.
658
657
 
659
658
  ### Changes for W3C WebDriver Spec Compliance
660
659
 
661
- * Changed `element.sendKeys(...)` to send the key sequence as an array where
662
- each element defines a single key. The legacy wire protocol permits arrays
663
- where each element is a string of arbitrary length. This change is solely
664
- at the protocol level and should have no user-visible effect.
665
-
660
+ * Changed `element.sendKeys(...)` to send the key sequence as an array where each element defines a
661
+ single key. The legacy wire protocol permits arrays where each element is a string of arbitrary
662
+ length. This change is solely at the protocol level and should have no user-visible effect.
666
663
 
667
664
  ## v2.52.0
668
665
 
@@ -676,51 +673,47 @@ the selenium-webdriver package README.
676
673
  ### Change Summary
677
674
 
678
675
  * Add support for Microsoft's Edge web browser
679
- * Added `webdriver.Builder#buildAsync()`, which returns a promise that will be
680
- fulfilled with the newly created WebDriver instance once the associated
681
- browser has been full initialized. This is purely a convenient alternative
682
- to the existing build() method as the WebDriver class will always defer
683
- commands until it has a fully created browser.
684
- * Added `firefox.Profile#setHost()` which may be used to set the host that
685
- the FirefoxDriver's server listens for commands on. The server uses
686
- "localhost" by default.
676
+ * Added `webdriver.Builder#buildAsync()`, which returns a promise that will be fulfilled with the
677
+ newly created WebDriver instance once the associated browser has been full initialized. This is
678
+ purely a convenient alternative to the existing build() method as the WebDriver class will always
679
+ defer commands until it has a fully created browser.
680
+ * Added `firefox.Profile#setHost()` which may be used to set the host that the FirefoxDriver's
681
+ server listens for commands on. The server uses
682
+ "localhost" by default.
687
683
  * Added `promise.Promise#catch()` for API compatibility with native Promises.
688
- `promise.Promise#thenCatch()` is not yet deprecated, but it simply
689
- delegates to `catch`.
684
+ `promise.Promise#thenCatch()` is not yet deprecated, but it simply delegates to `catch`.
690
685
  * Changed some `io` operations to use native promises.
691
- * Changed `command.Executor#execute()` and `HttpClient#send()` to return
692
- promises instead of using callback passing.
686
+ * Changed `command.Executor#execute()` and `HttpClient#send()` to return promises instead of using
687
+ callback passing.
693
688
  * Replaced the `Serializable` class with an internal, Symbol-defined method.
694
689
  * Changed the `Capabilities` class to extend the native `Map` type.
695
690
  * Changed the `Capabilities.has(key)` to only test if a capability has been set
696
- (Map semantics). To check whether the value is true, use `get(key)`.
691
+ (Map semantics). To check whether the value is true, use `get(key)`.
697
692
  * Deprecated `executors.DeferredExecutor` in favor of
698
- `lib/command.DeferredExecutor`.
699
- * API documentation is no longer distributed with the npm package, but remains
700
- available at <http://seleniumhq.github.io/selenium/docs/api/javascript/>
701
- * Rewrote the `error` module to export an Error subtype for each type of error
702
- defined in the [W3C WebDriver spec](https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors).
703
- * Changed the `http.Request` and `http.Response` classes to store headers in
704
- maps instead of object literals.
693
+ `lib/command.DeferredExecutor`.
694
+ * API documentation is no longer distributed with the npm package, but remains available
695
+ at <http://seleniumhq.github.io/selenium/docs/api/javascript/>
696
+ * Rewrote the `error` module to export an Error subtype for each type of error defined in
697
+ the [W3C WebDriver spec](https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors).
698
+ * Changed the `http.Request` and `http.Response` classes to store headers in maps instead of object
699
+ literals.
705
700
  * Updated `ws` dependency to version `1.0.1`.
706
701
  * Removed fluent predicates "is" and "not" from the experimental
707
- `testing/assert` module.
708
- * Wait conditions that locate an element, or that wait on an element's state,
709
- will return a WebElementPromise.
710
- * Lots of internal clean-up to break selenium-webdriver's long standing
711
- dependency on Google's Closure library.
702
+ `testing/assert` module.
703
+ * Wait conditions that locate an element, or that wait on an element's state, will return a
704
+ WebElementPromise.
705
+ * Lots of internal clean-up to break selenium-webdriver's long standing dependency on Google's
706
+ Closure library.
712
707
 
713
708
  ### Changes for W3C WebDriver Spec Compliance
714
709
 
715
- * Updated the `By` locators that are not in the W3C spec to delegated to using
716
- CSS selectors: `By.className`, `By.id`, `By.name`, and `By.tagName`.
717
-
710
+ * Updated the `By` locators that are not in the W3C spec to delegated to using CSS
711
+ selectors: `By.className`, `By.id`, `By.name`, and `By.tagName`.
718
712
 
719
713
  ## v2.49-51
720
714
 
721
715
  * _Releases skipped to stay in sync with the rest of the Selenium project_
722
716
 
723
-
724
717
  ## v2.48.2
725
718
 
726
719
  * Added `WebElement#takeScreenshot()`.
@@ -728,24 +721,22 @@ the selenium-webdriver package README.
728
721
 
729
722
  ## v2.48.1
730
723
 
731
- * FIXED: Adjusted how the control flow tracks promise callbacks to avoid a
732
- potential deadlock.
724
+ * FIXED: Adjusted how the control flow tracks promise callbacks to avoid a potential deadlock.
733
725
 
734
726
  ## v2.48.0
735
727
 
736
- * Node v0.12.x users must run with --harmony. _This is the last release that
737
- will support v0.12.x_
738
- * FIXED: (Promise/A+ compliance) When a promise is rejected with a thenable,
739
- the promise adopts the thenable as its rejection reason instead of waiting
740
- for it to settle. The previous (incorrect) behavior was hidden by bugs in
741
- the `promises-aplus-tests` compliance test suite that were fixed in version
742
- `2.1.1`.
743
- * FIXED: the `webdriver.promise.ControlFlow` now has a consistent execution
744
- order for tasks/callbacks scheduled in different turns of the JS event loop.
745
- Refer to the `webdriver.promise` documentation for more details.
728
+ * Node v0.12.x users must run with --harmony. _This is the last release that will support v0.12.x_
729
+ * FIXED: (Promise/A+ compliance) When a promise is rejected with a thenable, the promise adopts the
730
+ thenable as its rejection reason instead of waiting for it to settle. The previous (incorrect)
731
+ behavior was hidden by bugs in the `promises-aplus-tests` compliance test suite that were fixed in
732
+ version
733
+ `2.1.1`.
734
+ * FIXED: the `webdriver.promise.ControlFlow` now has a consistent execution order for
735
+ tasks/callbacks scheduled in different turns of the JS event loop. Refer to
736
+ the `webdriver.promise` documentation for more details.
746
737
  * FIXED: do not drop user auth from the WebDriver server URL.
747
- * FIXED: a single `firefox.Binary` instance may be used to configure and
748
- launch multiple FirefoxDriver sessions.
738
+ * FIXED: a single `firefox.Binary` instance may be used to configure and launch multiple
739
+ FirefoxDriver sessions.
749
740
 
750
741
  var binary = new firefox.Binary();
751
742
  var options = new firefox.Options().setBinary(binary);
@@ -754,11 +745,11 @@ the selenium-webdriver package README.
754
745
  var driver1 = builder.build();
755
746
  var driver2 = builder.build();
756
747
 
757
- * FIXED: zip files created for transfer to a remote WebDriver server are no
758
- longer compressed. If the zip contained a file that was already compressed,
759
- the server would return an "invalid code lengths set" error.
760
- * FIXED: Surfaced the `loopback` option to `remote/SeleniumServer`. When set,
761
- the server will be accessed using the current host's loopback address.
748
+ * FIXED: zip files created for transfer to a remote WebDriver server are no longer compressed. If
749
+ the zip contained a file that was already compressed, the server would return an "invalid code
750
+ lengths set" error.
751
+ * FIXED: Surfaced the `loopback` option to `remote/SeleniumServer`. When set, the server will be
752
+ accessed using the current host's loopback address.
762
753
 
763
754
  ## v2.47.0
764
755
 
@@ -773,21 +764,21 @@ continue to be supported, but will require setting the `--harmony` flag.
773
764
 
774
765
  * Add support for [Node v4.0.0](https://nodejs.org/en/blog/release/v4.0.0/)
775
766
  * Updated `ws` dependency from `0.7.1` to `0.8.0`
776
- * Bumped the minimum supported version of Node from `0.10.x` to `0.12.x`. This
777
- is in accordance with the Node support policy established in `v2.45.0`.
767
+ * Bumped the minimum supported version of Node from `0.10.x` to `0.12.x`. This is in accordance with
768
+ the Node support policy established in `v2.45.0`.
778
769
 
779
770
  ## v2.46.1
780
771
 
781
772
  * Fixed internal module loading on Windows.
782
773
  * Fixed error message format on timeouts for `until.elementLocated()`
783
- and `until.elementsLocated()`.
774
+ and `until.elementsLocated()`.
784
775
 
785
776
  ## v2.46.0
786
777
 
787
778
  * Exposed a new logging API via the `webdriver.logging` module. For usage, see
788
- `example/logging.js`.
789
- * Added support for using a proxy server for WebDriver commands.
790
- See `Builder#usingWebDriverProxy()` for more info.
779
+ `example/logging.js`.
780
+ * Added support for using a proxy server for WebDriver commands. See `Builder#usingWebDriverProxy()`
781
+ for more info.
791
782
  * Removed deprecated functions:
792
783
  * Capabilities#toJSON()
793
784
  * UnhandledAlertError#getAlert()
@@ -798,32 +789,30 @@ continue to be supported, but will require setting the `--harmony` flag.
798
789
  * promise.ControlFlow#clearHistory()
799
790
  * promise.ControlFlow#getHistory()
800
791
  * Removed deprecated enum values: `ErrorCode.NO_MODAL_DIALOG_OPEN` and
801
- `ErrorCode.MODAL_DIALOG_OPENED`. Use `ErrorCode.NO_SUCH_ALERT` and
802
- `ErrorCode.UNEXPECTED_ALERT_OPEN`, respectively.
803
- * FIXED: The `promise.ControlFlow` will maintain state for promise chains
804
- generated in a loop.
792
+ `ErrorCode.MODAL_DIALOG_OPENED`. Use `ErrorCode.NO_SUCH_ALERT` and
793
+ `ErrorCode.UNEXPECTED_ALERT_OPEN`, respectively.
794
+ * FIXED: The `promise.ControlFlow` will maintain state for promise chains generated in a loop.
805
795
  * FIXED: Correct serialize target elements used in an action sequence.
806
- * FIXED: `promise.ControlFlow#wait()` now has consistent semantics for an
807
- omitted or 0-timeout: it will wait indefinitely.
808
- * FIXED: `remote.DriverService#start()` will now fail if the child process dies
809
- while waiting for the server to start accepting requests. Previously, start
810
- would continue to poll the server address until the timeout expired.
811
- * FIXED: Skip launching Firefox with the `-silent` flag to preheat the profile.
812
- Starting with Firefox 38, this would cause the browser to crash. This step,
813
- which was first introduced for Selenium's java client back with Firefox 2,
814
- no longer appears to be required.
815
- * FIXED: 8564: `firefox.Driver#quit()` will wait for the Firefox process to
816
- terminate before deleting the temporary webdriver profile. This eliminates a
817
- race condition where Firefox would write profile data during shutdown,
818
- causing the `rm -rf` operation on the profile directory to fail.
796
+ * FIXED: `promise.ControlFlow#wait()` now has consistent semantics for an omitted or 0-timeout: it
797
+ will wait indefinitely.
798
+ * FIXED: `remote.DriverService#start()` will now fail if the child process dies while waiting for
799
+ the server to start accepting requests. Previously, start would continue to poll the server
800
+ address until the timeout expired.
801
+ * FIXED: Skip launching Firefox with the `-silent` flag to preheat the profile. Starting with
802
+ Firefox 38, this would cause the browser to crash. This step, which was first introduced for
803
+ Selenium's java client back with Firefox 2, no longer appears to be required.
804
+ * FIXED: 8564: `firefox.Driver#quit()` will wait for the Firefox process to terminate before
805
+ deleting the temporary webdriver profile. This eliminates a race condition where Firefox would
806
+ write profile data during shutdown, causing the `rm -rf` operation on the profile directory to
807
+ fail.
819
808
 
820
809
  ## v2.45.1
821
810
 
822
- * FIXED: 8548: Task callbacks are once again dropped if the task was cancelled
823
- due to a previously uncaught error within the frame.
824
- * FIXED: 8496: Extended the `chrome.Options` API to cover all configuration
825
- options (e.g. mobile emulation and performance logging) documented on the
826
- ChromeDriver [project site](https://chromedriver.chromium.org/capabilities).
811
+ * FIXED: 8548: Task callbacks are once again dropped if the task was cancelled due to a previously
812
+ uncaught error within the frame.
813
+ * FIXED: 8496: Extended the `chrome.Options` API to cover all configuration options (e.g. mobile
814
+ emulation and performance logging) documented on the
815
+ ChromeDriver [project site](https://chromedriver.chromium.org/capabilities).
827
816
 
828
817
  ## v2.45.0
829
818
 
@@ -839,10 +828,10 @@ major version release (i.e. 1.0.0).
839
828
 
840
829
  * Added native browser support for Internet Explorer, Opera 26+, and Safari
841
830
  * With the release of [Node 0.12.0](http://blog.nodejs.org/2015/02/06/node-v0-12-0-stable/)
842
- (finally!), the minimum supported version of Node is now `0.10.x`.
831
+ (finally!), the minimum supported version of Node is now `0.10.x`.
843
832
  * The `promise` module is now [Promises/A+](https://promisesaplus.com/)
844
- compliant. The biggest compliance change is that promise callbacks are now
845
- invoked in a future turn of the JS event loop. For example:
833
+ compliant. The biggest compliance change is that promise callbacks are now invoked in a future
834
+ turn of the JS event loop. For example:
846
835
 
847
836
  var promise = require('selenium-webdriver').promise;
848
837
  console.log('start');
@@ -861,12 +850,11 @@ major version release (i.e. 1.0.0).
861
850
  // end
862
851
  // middle
863
852
 
864
- The `promise.ControlFlow` class has been updated to track the asynchronous
865
- breaks required by Promises/A+, so there are no changes to task execution
866
- order.
867
- * Updated how errors are annotated on failures. When a task fails, the
868
- stacktrace from when that task was scheduled is appended to the rejection
869
- reason with a `From: ` prefix (if it is an Error object). For example:
853
+ The `promise.ControlFlow` class has been updated to track the asynchronous breaks required by
854
+ Promises/A+, so there are no changes to task execution order.
855
+ * Updated how errors are annotated on failures. When a task fails, the stacktrace from when that
856
+ task was scheduled is appended to the rejection reason with a `From: ` prefix (if it is an Error
857
+ object). For example:
870
858
 
871
859
  var driver = new webdriver.Builder().forBrowser('chrome').build();
872
860
  driver.get('http://www.google.com/ncr');
@@ -876,7 +864,7 @@ major version release (i.e. 1.0.0).
876
864
  }, 2000, 'element not found');
877
865
  });
878
866
 
879
- This code will fail an error like:
867
+ This code will fail an error like:
880
868
 
881
869
  Error: element not found
882
870
  Wait timed out after 2002ms
@@ -886,36 +874,31 @@ major version release (i.e. 1.0.0).
886
874
  From: Task: WebDriver.call(function)
887
875
  at <stack trace>
888
876
 
889
- * Changed the format of strings returned by `promise.ControlFlow#getSchedule`.
890
- This function now accepts a boolean to control whether the returned string
891
- should include the stacktraces for when each task was scheduled.
877
+ * Changed the format of strings returned by `promise.ControlFlow#getSchedule`. This function now
878
+ accepts a boolean to control whether the returned string should include the stacktraces for when
879
+ each task was scheduled.
892
880
  * Deprecating `promise.ControlFlow#getHistory`,
893
- `promise.ControlFlow#clearHistory`, and `promise.ControlFlow#annotateError`.
894
- These functions were all intended for internal use and are no longer
895
- necessary, so they have been made no-ops.
896
- * `WebDriver.wait()` may now be used to wait for a promise to resolve, with
897
- an optional timeout. Refer to the API documentation for more information.
898
- * Added support for copying files to a remote Selenium via `sendKeys` to test
899
- file uploads. Refer to the API documentation for more information. Sample
900
- usage included in `test/upload_test.js`
901
- * Expanded the interactions API to include touch actions.
902
- See `WebDriver.touchActions()`.
881
+ `promise.ControlFlow#clearHistory`, and `promise.ControlFlow#annotateError`. These functions were
882
+ all intended for internal use and are no longer necessary, so they have been made no-ops.
883
+ * `WebDriver.wait()` may now be used to wait for a promise to resolve, with an optional timeout.
884
+ Refer to the API documentation for more information.
885
+ * Added support for copying files to a remote Selenium via `sendKeys` to test file uploads. Refer to
886
+ the API documentation for more information. Sample usage included in `test/upload_test.js`
887
+ * Expanded the interactions API to include touch actions. See `WebDriver.touchActions()`.
903
888
  * FIXED: 8380: `firefox.Driver` will delete its temporary profile on `quit`.
904
889
  * FIXED: 8306: Stack overflow in promise callbacks eliminated.
905
- * FIXED: 8221: Added support for defining custom command mappings. Includes
906
- support for PhantomJS's `executePhantomJS` (requires PhantomJS 1.9.7 or
907
- GhostDriver 1.1.0).
890
+ * FIXED: 8221: Added support for defining custom command mappings. Includes support for
891
+ PhantomJS's `executePhantomJS` (requires PhantomJS 1.9.7 or GhostDriver 1.1.0).
908
892
  * FIXED: 8128: When the FirefoxDriver marshals an object to the page for
909
- `executeScript`, it defines additional properties (required by the driver's
910
- implementation). These properties will no longer be enumerable and should
911
- be omitted (i.e. they won't show up in JSON.stringify output).
912
- * FIXED: 8094: The control flow will no longer deadlock when a task returns
913
- a promise that depends on the completion of sub-tasks.
893
+ `executeScript`, it defines additional properties (required by the driver's implementation). These
894
+ properties will no longer be enumerable and should be omitted (i.e. they won't show up in
895
+ JSON.stringify output).
896
+ * FIXED: 8094: The control flow will no longer deadlock when a task returns a promise that depends
897
+ on the completion of sub-tasks.
914
898
 
915
899
  ## v2.44.0
916
900
 
917
- * Added the `until` module, which defines common explicit wait conditions.
918
- Sample usage:
901
+ * Added the `until` module, which defines common explicit wait conditions. Sample usage:
919
902
 
920
903
  var firefox = require('selenium-webdriver/firefox'),
921
904
  until = require('selenium-webdriver/until');
@@ -924,46 +907,43 @@ major version release (i.e. 1.0.0).
924
907
  driver.get('http://www.google.com/ncr');
925
908
  driver.wait(until.titleIs('Google Search'), 1000);
926
909
 
927
- * FIXED: 8000: `Builder.forBrowser()` now accepts an empty string since some
928
- WebDriver implementations ignore the value. A value must still be specified,
929
- however, since it is a required field in WebDriver's wire protocol.
930
- * FIXED: 7994: The `stacktrace` module will not modify stack traces if the
931
- initial parse fails (e.g. the user defined `Error.prepareStackTrace`)
932
- * FIXED: 5855: Added a module (`until`) that defines several common conditions
933
- for use with explicit waits. See updated examples for usage.
910
+ * FIXED: 8000: `Builder.forBrowser()` now accepts an empty string since some WebDriver
911
+ implementations ignore the value. A value must still be specified, however, since it is a required
912
+ field in WebDriver's wire protocol.
913
+ * FIXED: 7994: The `stacktrace` module will not modify stack traces if the initial parse fails (e.g.
914
+ the user defined `Error.prepareStackTrace`)
915
+ * FIXED: 5855: Added a module (`until`) that defines several common conditions for use with explicit
916
+ waits. See updated examples for usage.
934
917
 
935
918
  ## v2.43.5
936
919
 
937
- * FIXED: 7905: `Builder.usingServer(url)` once again returns `this` for
938
- chaining.
920
+ * FIXED: 7905: `Builder.usingServer(url)` once again returns `this` for chaining.
939
921
 
940
922
  ## v2.43.2-4
941
923
 
942
- * No changes; version bumps while attempting to work around an issue with
943
- publishing to npm (a version string may only be used once).
924
+ * No changes; version bumps while attempting to work around an issue with publishing to npm (a
925
+ version string may only be used once).
944
926
 
945
927
  ## v2.43.1
946
928
 
947
- * Fixed an issue with flakiness when setting up the Firefox profile that could
948
- prevent the driver from initializing properly.
929
+ * Fixed an issue with flakiness when setting up the Firefox profile that could prevent the driver
930
+ from initializing properly.
949
931
 
950
932
  ## v2.43.0
951
933
 
952
- * Added native support for Firefox - the Java Selenium server is no longer
953
- required.
934
+ * Added native support for Firefox - the Java Selenium server is no longer required.
954
935
  * Added support for generator functions to `ControlFlow#execute` and
955
- `ControlFlow#wait`. For more information, see documentation on
956
- `webdriver.promise.consume`. Requires harmony support (run with
957
- `node --harmony-generators` in `v0.11.x`).
958
- * Various improvements to the `Builder` API. Notably, the `build()` function
959
- will no longer default to attempting to use a server at
960
- `http://localhost:4444/wd/hub` if it cannot start a browser directly -
961
- you must specify the WebDriver server with `usingServer(url)`. You can
962
- also set the target browser and WebDriver server through a pair of
963
- environment variables. See the documentation on the `Builder` constructor
964
- for more information.
965
- * For consistency with the other language bindings, added browser specific
966
- classes that can be used to start a browser without the builder.
936
+ `ControlFlow#wait`. For more information, see documentation on
937
+ `webdriver.promise.consume`. Requires harmony support (run with
938
+ `node --harmony-generators` in `v0.11.x`).
939
+ * Various improvements to the `Builder` API. Notably, the `build()` function will no longer default
940
+ to attempting to use a server at
941
+ `http://localhost:4444/wd/hub` if it cannot start a browser directly - you must specify the
942
+ WebDriver server with `usingServer(url)`. You can also set the target browser and WebDriver server
943
+ through a pair of environment variables. See the documentation on the `Builder` constructor for
944
+ more information.
945
+ * For consistency with the other language bindings, added browser specific classes that can be used
946
+ to start a browser without the builder.
967
947
 
968
948
  var webdriver = require('selenium-webdriver')
969
949
  chrome = require('selenium-webdriver/chrome');
@@ -974,16 +954,14 @@ major version release (i.e. 1.0.0).
974
954
 
975
955
  * Promise A+ compliance: a promise may no longer resolve to itself.
976
956
  * For consistency with other language bindings, deprecated
977
- `UnhandledAlertError#getAlert` and added `#getAlertText`.
978
- `getAlert` will be removed in `2.45.0`.
957
+ `UnhandledAlertError#getAlert` and added `#getAlertText`.
958
+ `getAlert` will be removed in `2.45.0`.
979
959
  * FIXED: 7641: Deprecated `ErrorCode.NO_MODAL_DIALOG_OPEN` and
980
- `ErrorCode.MODAL_DIALOG_OPENED` in favor of the new
981
- `ErrorCode.NO_SUCH_ALERT` and `ErrorCode.UNEXPECTED_ALERT_OPEN`,
982
- respectively.
983
- * FIXED: 7563: Mocha integration no longer disables timeouts. Default Mocha
984
- timeouts apply (2000 ms) and may be changed using `this.timeout(ms)`.
985
- * FIXED: 7470: Make it easier to create WebDriver instances in custom flows for
986
- parallel execution.
960
+ `ErrorCode.MODAL_DIALOG_OPENED` in favor of the new
961
+ `ErrorCode.NO_SUCH_ALERT` and `ErrorCode.UNEXPECTED_ALERT_OPEN`, respectively.
962
+ * FIXED: 7563: Mocha integration no longer disables timeouts. Default Mocha timeouts apply (2000 ms)
963
+ and may be changed using `this.timeout(ms)`.
964
+ * FIXED: 7470: Make it easier to create WebDriver instances in custom flows for parallel execution.
987
965
 
988
966
  ## v2.42.1
989
967
 
@@ -994,12 +972,11 @@ major version release (i.e. 1.0.0).
994
972
  ## v2.42.0
995
973
 
996
974
  * Removed deprecated functions `Promise#addCallback()`,
997
- `Promise#addCallbacks()`, `Promise#addErrback()`, and `Promise#addBoth()`.
975
+ `Promise#addCallbacks()`, `Promise#addErrback()`, and `Promise#addBoth()`.
998
976
  * Fail with a more descriptive error if the server returns a malformed redirect
999
- * FIXED: 7300: Connect to ChromeDriver using the loopback address since
1000
- ChromeDriver 2.10.267517 binds to localhost by default.
1001
- * FIXED: 7339: Preserve wrapped test function's string representation for
1002
- Mocha's BDD interface.
977
+ * FIXED: 7300: Connect to ChromeDriver using the loopback address since ChromeDriver 2.10.267517
978
+ binds to localhost by default.
979
+ * FIXED: 7339: Preserve wrapped test function's string representation for Mocha's BDD interface.
1003
980
 
1004
981
  ## v2.41.0
1005
982
 
@@ -1010,10 +987,10 @@ major version release (i.e. 1.0.0).
1010
987
 
1011
988
  * API documentation is now included in the docs directory.
1012
989
  * Added utility functions for working with an array of promises:
1013
- `promise.all`, `promise.map`, and `promise.filter`
990
+ `promise.all`, `promise.map`, and `promise.filter`
1014
991
  * Introduced `Promise#thenCatch()` and `Promise#thenFinally()`.
1015
992
  * Deprecated `Promise#addCallback()`, `Promise#addCallbacks()`,
1016
- `Promise#addErrback()`, and `Promise#addBoth()`.
993
+ `Promise#addErrback()`, and `Promise#addBoth()`.
1017
994
  * Removed deprecated function `webdriver.WebDriver#getCapability`.
1018
995
  * FIXED: 6826: Added support for custom locators.
1019
996
 
@@ -1023,28 +1000,26 @@ major version release (i.e. 1.0.0).
1023
1000
 
1024
1001
  ## v2.38.1
1025
1002
 
1026
- * FIXED: 6686: Changed `webdriver.promise.Deferred#cancel()` to silently no-op
1027
- if the deferred has already been resolved.
1003
+ * FIXED: 6686: Changed `webdriver.promise.Deferred#cancel()` to silently no-op if the deferred has
1004
+ already been resolved.
1028
1005
 
1029
1006
  ## v2.38.0
1030
1007
 
1031
- * When a promise is rejected, always annotate the stacktrace with the parent
1032
- flow state so users can identify the source of an error.
1008
+ * When a promise is rejected, always annotate the stacktrace with the parent flow state so users can
1009
+ identify the source of an error.
1033
1010
  * Updated tests to reflect features not working correctly in the SafariDriver
1034
- (cookie management and proxy support; see issues 5051, 5212, and 5503)
1035
- * FIXED: 6284: For mouse moves, correctly omit the x/y offsets if not
1036
- specified as a function argument (instead of passing (0,0)).
1011
+ (cookie management and proxy support; see issues 5051, 5212, and 5503)
1012
+ * FIXED: 6284: For mouse moves, correctly omit the x/y offsets if not specified as a function
1013
+ argument (instead of passing (0,0)).
1037
1014
  * FIXED: 6471: Updated documentation on `webdriver.WebElement#getAttribute`
1038
- * FIXED: 6612: On Unix, use the default IANA ephemeral port range if unable to
1039
- retrieve the current system's port range.
1040
- * FIXED: 6617: Avoid triggering the node debugger when initializing the
1041
- stacktrace module.
1015
+ * FIXED: 6612: On Unix, use the default IANA ephemeral port range if unable to retrieve the current
1016
+ system's port range.
1017
+ * FIXED: 6617: Avoid triggering the node debugger when initializing the stacktrace module.
1042
1018
  * FIXED: 6627: Safely rebuild chrome.Options from a partial JSON spec.
1043
1019
 
1044
1020
  ## v2.37.0
1045
1021
 
1046
- * FIXED: 6346: The remote.SeleniumServer class now accepts JVM arguments using
1047
- the `jvmArgs` option.
1022
+ * FIXED: 6346: The remote.SeleniumServer class now accepts JVM arguments using the `jvmArgs` option.
1048
1023
 
1049
1024
  ## v2.36.0
1050
1025
 
@@ -1064,20 +1039,18 @@ major version release (i.e. 1.0.0).
1064
1039
 
1065
1040
  ## v2.34.1
1066
1041
 
1067
- * FIXED: 6079: The parent process should not wait for spawn driver service
1068
- processes (chromedriver, phantomjs, etc.)
1042
+ * FIXED: 6079: The parent process should not wait for spawn driver service processes (chromedriver,
1043
+ phantomjs, etc.)
1069
1044
 
1070
1045
  ## v2.34.0
1071
1046
 
1072
- * Added the `selenium-webdriver/testing/assert` module. This module
1073
- simplifies writing assertions against promised values (see
1074
- example in module documentation).
1047
+ * Added the `selenium-webdriver/testing/assert` module. This module simplifies writing assertions
1048
+ against promised values (see example in module documentation).
1075
1049
  * Added the `webdriver.Capabilities` class.
1076
- * Added native support for the ChromeDriver. When using the `Builder`,
1077
- requesting chrome without specifying a remote server URL will default to
1078
- the native ChromeDriver implementation. The
1079
- [ChromeDriver server](https://code.google.com/p/chromedriver/downloads/list)
1080
- must be downloaded separately.
1050
+ * Added native support for the ChromeDriver. When using the `Builder`, requesting chrome without
1051
+ specifying a remote server URL will default to the native ChromeDriver implementation. The
1052
+ [ChromeDriver server](https://code.google.com/p/chromedriver/downloads/list)
1053
+ must be downloaded separately.
1081
1054
 
1082
1055
  // Will start ChromeDriver locally.
1083
1056
  var driver = new webdriver.Builder().
@@ -1091,15 +1064,14 @@ major version release (i.e. 1.0.0).
1091
1064
  build();
1092
1065
 
1093
1066
  * Added support for configuring proxies through the builder. For examples, see
1094
- `selenium-webdriver/test/proxy_test`.
1067
+ `selenium-webdriver/test/proxy_test`.
1095
1068
  * Added native support for PhantomJS.
1096
1069
  * Changed signature of `SeleniumServer` to `SeleniumServer(jar, options)`.
1097
- * Tests are now included in the npm published package. See `README.md` for
1098
- execution instructions
1070
+ * Tests are now included in the npm published package. See `README.md` for execution instructions
1099
1071
  * Removed the deprecated `webdriver.Deferred#resolve` and
1100
- `webdriver.promise.resolved` functions.
1101
- * Removed the ability to connect to an existing session from the Builder. This
1102
- feature is intended for use with the browser-based client.
1072
+ `webdriver.promise.resolved` functions.
1073
+ * Removed the ability to connect to an existing session from the Builder. This feature is intended
1074
+ for use with the browser-based client.
1103
1075
 
1104
1076
  ## v2.33.0
1105
1077
 
@@ -1109,33 +1081,32 @@ major version release (i.e. 1.0.0).
1109
1081
  ## v2.32.1
1110
1082
 
1111
1083
  * FIXED: 5541: Added missing return statement for windows in
1112
- `portprober.findFreePort()`
1084
+ `portprober.findFreePort()`
1113
1085
 
1114
1086
  ## v2.32.0
1115
1087
 
1116
- * Added the `selenium-webdriver/testing` package, which provides a basic
1117
- framework for writing tests using Mocha. See
1118
- `selenium-webdriver/example/google_search_test.js` for usage.
1119
- * For Promises/A+ compatibility, backing out the change in 2.30.0 that ensured
1120
- rejections were always Error objects. Rejection reasons are now left as is.
1088
+ * Added the `selenium-webdriver/testing` package, which provides a basic framework for writing tests
1089
+ using Mocha. See
1090
+ `selenium-webdriver/example/google_search_test.js` for usage.
1091
+ * For Promises/A+ compatibility, backing out the change in 2.30.0 that ensured rejections were
1092
+ always Error objects. Rejection reasons are now left as is.
1121
1093
  * Removed deprecated functions originally scheduled for removal in 2.31.0
1122
1094
  * promise.Application.getInstance()
1123
1095
  * promise.ControlFlow#schedule()
1124
1096
  * promise.ControlFlow#scheduleTimeout()
1125
1097
  * promise.ControlFlow#scheduleWait()
1126
- * Renamed some functions for consistency with Promises/A+ terminology. The
1127
- original functions have been deprecated and will be removed in 2.34.0:
1098
+ * Renamed some functions for consistency with Promises/A+ terminology. The original functions have
1099
+ been deprecated and will be removed in 2.34.0:
1128
1100
  * promise.resolved() -> promise.fulfilled()
1129
1101
  * promise.Deferred#resolve() -> promise.Deferred#fulfill()
1130
- * FIXED: remote.SeleniumServer#stop now shuts down within the active control
1131
- flow, allowing scripts to finish. Use #kill to shutdown immediately.
1102
+ * FIXED: remote.SeleniumServer#stop now shuts down within the active control flow, allowing scripts
1103
+ to finish. Use #kill to shutdown immediately.
1132
1104
  * FIXED: 5321: cookie deletion commands
1133
1105
 
1134
1106
  ## v2.31.0
1135
1107
 
1136
1108
  * Added an example script.
1137
- * Added a class for controlling the standalone Selenium server (server
1138
- available separately)
1109
+ * Added a class for controlling the standalone Selenium server (server available separately)
1139
1110
  * Added a portprober for finding free ports
1140
1111
  * FIXED: WebElements now belong to the same flow as their parent driver.
1141
1112