Starting with the 2.45.0 release, selenium-webdriver will support the last
two stable minor releases for Node. For 2.45.0, this means Selenium will
support Node 0.10.x and 0.12.x. Support for the intermediate, un-stable release
(0.11.x) is "best-effort". This policy will be re-evaluated once Node has a
major version release (i.e. 1.0.0).
-
Added native browser support for Internet Explorer, Opera 26+, and Safari
-
With the release of Node 0.12.0
(finally!), the minimum supported version of Node is now 0.10.x
.
-
The promise
module is now Promises/A+
compliant. The biggest compliance change is that promise callbacks are now
invoked in a future turn of the JS event loop. For example:
var promise = require('selenium-webdriver').promise;
console.log('start');
promise.fulfilled().then(function() {
console.log('middle');
});
console.log('end');
// Output in selenium-webdriver@2.44.0
// start
// middle
// end
//
// Output in selenium-webdriver@2.45.0
// start
// end
// middle
The promise.ControlFlow
class has been updated to track the asynchronous
breaks required by Promises/A+, so there are no changes to task execution
order.
-
Updated how errors are annotated on failures. When a task fails, the
stacktrace from when that task was scheduled is appended to the rejection
reason with a From:
prefix (if it is an Error object). For example:
var driver = new webdriver.Builder().forBrowser('chrome').build();
driver.get('http://www.google.com/ncr');
driver.call(function() {
driver.wait(function() {
return driver.isElementPresent(webdriver.By.id('not-there'));
}, 2000, 'element not found');
});
This code will fail an error like:
Error: element not found
Wait timed out after 2002ms
at <stack trace>
From: Task: element not found
at <stack trace>
From: Task: WebDriver.call(function)
at <stack trace>
-
Changed the format of strings returned by promise.ControlFlow#getSchedule
.
This function now accepts a boolean to control whether the returned string
should include the stacktraces for when each task was scheduled.
-
Deprecating promise.ControlFlow#getHistory
,
promise.ControlFlow#clearHistory
, and promise.ControlFlow#annotateError
.
These functions were all intended for internal use and are no longer
necessary, so they have been made no-ops.
-
WebDriver.wait()
may now be used to wait for a promise to resolve, with
an optional timeout. Refer to the API documentation for more information.
-
Added support for copying files to a remote Selenium via sendKeys
to test
file uploads. Refer to the API documentation for more information. Sample
usage included in test/upload_test.js
-
Expanded the interactions API to include touch actions.
See WebDriver.touchActions()
.
-
FIXED: 8380: firefox.Driver
will delete its temporary profile on quit
.
-
FIXED: 8306: Stack overflow in promise callbacks eliminated.
-
FIXED: 8221: Added support for defining custom command mappings. Includes
support for PhantomJS's executePhantomJS
(requires PhantomJS 1.9.7 or
GhostDriver 1.1.0).
-
FIXED: 8128: When the FirefoxDriver marshals an object to the page for
executeScript
, it defines additional properties (required by the driver's
implementation). These properties will no longer be enumerable and should
be omitted (i.e. they won't show up in JSON.stringify output).
-
FIXED: 8094: The control flow will no longer deadlock when a task returns
a promise that depends on the completion of sub-tasks.
-
Added native support for Firefox - the Java Selenium server is no longer
required.
-
Added support for generator functions to ControlFlow#execute
and
ControlFlow#wait
. For more information, see documentation on
webdriver.promise.consume
. Requires harmony support (run with
node --harmony-generators
in v0.11.x
).
-
Various improvements to the Builder
API. Notably, the build()
function
will no longer default to attempting to use a server at
http://localhost:4444/wd/hub
if it cannot start a browser directly -
you must specify the WebDriver server with usingServer(url)
. You can
also set the target browser and WebDriver server through a pair of
environment variables. See the documentation on the Builder
constructor
for more information.
-
For consistency with the other language bindings, added browser specific
classes that can be used to start a browser without the builder.
var webdriver = require('selenium-webdriver')
chrome = require('selenium-webdriver/chrome');
// The following are equivalent.
var driver1 = new webdriver.Builder().forBrowser('chrome').build();
var driver2 = new chrome.Driver();
-
Promise A+ compliance: a promise may no longer resolve to itself.
-
For consistency with other language bindings, deprecated
UnhandledAlertError#getAlert
and added #getAlertText
.
getAlert
will be removed in 2.45.0
.
-
FIXED: 7641: Deprecated ErrorCode.NO_MODAL_DIALOG_OPEN
and
ErrorCode.MODAL_DIALOG_OPENED
in favor of the new
ErrorCode.NO_SUCH_ALERT
and ErrorCode.UNEXPECTED_ALERT_OPEN
,
respectively.
-
FIXED: 7563: Mocha integration no longer disables timeouts. Default Mocha
timeouts apply (2000 ms) and may be changed using this.timeout(ms)
.
-
FIXED: 7470: Make it easier to create WebDriver instances in custom flows for
parallel execution.
-
Added the selenium-webdriver/testing/assert
module. This module
simplifies writing assertions against promised values (see
example in module documentation).
-
Added the webdriver.Capabilities
class.
-
Added native support for the ChromeDriver. When using the Builder
,
requesting chrome without specifying a remote server URL will default to
the native ChromeDriver implementation. The
ChromeDriver server
must be downloaded separately.
// Will start ChromeDriver locally.
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
// Will start ChromeDriver using the remote server.
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
usingServer('http://server:1234/wd/hub').
build();
-
Added support for configuring proxies through the builder. For examples, see
selenium-webdriver/test/proxy_test
.
-
Added native support for PhantomJS.
-
Changed signature of SeleniumServer
to SeleniumServer(jar, options)
.
-
Tests are now included in the npm published package. See README.md
for
execution instructions
-
Removed the deprecated webdriver.Deferred#resolve
and
webdriver.promise.resolved
functions.
-
Removed the ability to connect to an existing session from the Builder. This
feature is intended for use with the browser-based client.