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.