NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #323 most downloaded on NuGet
Selenium is a set of different software tools each with a different approach to supporting browser automation. These tools are highly flexible, allowing many options for locating and manipulating elements within a browser, and one of its key features is the support for automating multiple browser platforms. This package contains the .NET bindings for the concise and object-based Selenium WebDriver API, which uses native OS-level events to manipulate the browser, bypassing the JavaScript sandbox, and does not require the Selenium Server to automate the browser.
Last release 11 days ago
09 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
6 versions withdrawn
withdrawn after publishing
127 years old
173 releases · first in 1900
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Bump version to a better approximation of pi.
Additionally, the DesiredCapabilities class is now marked as deprecated and will generate a compile warning on its use.
Refactored .NET capability handling. This version introduces a large and
intrusive refactor of the .NET bindings' capability handling. It introduces
a new class, RemoteSessionSettings, for use with creating remote sessions
via RemoteWebDriver. Additionally, the DesiredCapabilities class is now
marked as deprecated and will generate a compile warning on its use.
Almost without exception, users should not be using DesiredCapabilities in .NET. The browser-specific options classes provide functionality for adding any additional capabilities that would need to be sent to a remote end. One possible exception is when using RemoteWebDriver to connect to a remote server implementation, where the ToCapabilites method has been called, but the user wants to add additional capabilities, even though they could and should have been added before calling the method. In a future release, calling ToCapabilities will result in a read-only capabilities object, but recognizing that many users already have existing code that does this, moving immediately to make the returned object read-only is premature. For the moment, then, the SetCapabilty method is now marked as deprecated on DesiredCapabilities. In the next version of the .NET bindings, the return from ToCapabilities will be changed to return a read-only object.
The RemoteSessionSettings class is designed for use cases where the user wants to create a remote session using RemoteWebDriver where all of the nodes in the session creation support the W3C WebDriver Specification dialect of the wire protocol. This class is designed to be used in conjunction with the browser-specific driver options classes for matching capabilities on the remote end.
For single-browser cases, it is still possible (though unnecessary) to
use a browser-specific driver options class (ChromeOptions,
FirefoxOptions, etc.) by calling the ToCapabilities() method, but as
previously mentioned, in the future, the capabilities returned will be
read-only, and will not be able to be added to. Users who feel the need
to modify the options class after converting to capabilities are encouraged
to add the additional capabilities to the options class before the conversion
by appropriate use of the AddAdditionalCapability method.
Exposed additional extension points to better control HTTP communications between the language bindings and the remote end implementation. For the .NET implementation of HttpCommandExecutor, we now expose a Proxy property for proxying requests between the .NET code and the remote end WebDriver implementation. Note carefully that this is entirely separate from the proxy used by the browser for monitoring communications between the browser and the server hosting the page being automated.
Additionally, this change exposes the IsKeepAliveEnabled property to make it easier to set whether or not the "keep alive" header is sent when communicating between the language bindings and the remote end WebDriver implementation.
Finally, for local use, the DriverServiceCommandExecutor now exposes a property to allow the user to set tho newly-exposed properties by allowing access to the internal HttpCommandExecutor of the driver service.
Added a workaround for Safari Tech Preview to send the proper browser name to the driver.
Added type-safe properties for Safari capabilities in .NET SafariOptions.
Marked .NET hardware manipulation interfaces deprecated. The Mouse
Keyboard, and TouchScreen properties were never intended for direct
use in users' code. These interfaces, and the properties that reference
them, are now being marked as deprecated. The correct way to simulate
advanced user input is to use the Actions or ActionBuilder classes.
Removed long-deprecated local PhantomJS support from .NET, as well as other deprecated code.
Updated to fully remove use of internal CreateElement method in favor of a factory object.
(on behalf of Jake Durand) Replaced Chrome with Firefox in .NET documentation comments.
null to the empty string. This
is incorrect. If no element is specified in the move (for non-spec-compliant
driver), omit the ID altogether.Updated .NET escaping of CSS selectors for the find-by-ID and find-by-name cases. This is especially important for drivers that adhere to the W3C WebD
The previous event and event args are marked as deprecated for removal in a future release, and the previously named event is now a no-op, and will ne…
SendingReomteHttpRequest and
SendingRemoteHttpRequestEventArgs, respectively. The previous event and
event args are marked as deprecated for removal in a future release, and
the previously named event is now a no-op, and will never be fired, even
if a handler is attached.Reverted change of ICommandExecutor interface to extend IDisposable. This change will reappear at some point. Downstream projects will need to impleme
public void Dispose() method on any classes that implement
ICommandExecutor to prevent breaking when this interface change is added
again. Fixes issue #5768.Added option to tell ChromeDriver to use the W3C WebDriver protocol dialect instead of the legacy open-source dialect.
Added option to tell ChromeDriver to use the W3C WebDriver protocol dialect instead of the legacy open-source dialect.
(on behalf of Phillip Haydon) Updated doc strings for FirefoxDriver to no longer refer to ChromeDriver
Corrected remote URL for IWebElement.GetScreenshot() method.
Made ICommandExecutor interface extend IDisposable.
Fixed serialization of proxy autoconfig URLs. Fixes issue #5050.
Reverted .NET bindings to send spec-compliant new session for all browsers. Now that the Java remote server will correctly handle spec-compliant new session payload, even for browsers that are not yet spec-compliant, we can revert to the original behavior of sending both "capabilities" and "desiredCapabilities" properties with new session requests. Reverts commit 4ce57f6.
Modified to guard against assembly location being empty. When looking for supporting files on disk, the bindings look in the "current working directory" where the assembly is written. However, if the assembly has been embedded in an executable as a resource, and extracted into memory at runtime, the location will be blank. This commit prevents the exception being thrown, at the expense of possibly looking in the wrong directory.
Added locking for lazy-load of static dictionary. When running in parallel, there is a chance that multiple threads could attempt to populate a static dictionary used for translating error codes. This commit adds locking around the initialization of the static dictionary. Note that we are not using "double-check" locking, but the locking we use should be good enough. Fixes issue #3166.
(On behalf of John Chen) Fixed ChromeDriver NetworkConditions setter. The JSON object generated by the .NET version of ChromeDriver NetworkConditions setter had incorrect format, and was rejected by ChromeDriver.
Added sending a user-agent string for .NET remote HTTP requests to a remote end (Java standalone server, IEDriverServer.exe, chromedriver.exe, geckodriver.exe, etc.). Addresses #5657 for .NET.
Fixed .NET ChromeDriver network conditions commands URLs. Fixes issue #5693.
Added BeforeRemoteHttpRequest event to .NET RemoteWebDriver. This commit adds the ability for advanced users of the .NET bindings RemoteWebDriver class to modify the HTTP command sent from the .NET WebDriver code to the remote WebDriver server. Note carefully that this DOES NOT modify the HTTP request between the browser and the web server, and is not a mechanism for getting access to that HTTP request. Usage of this new event would look something like this:
public void StartDriver() { HttpCommandExecutor executor = new HttpCommandExecutor( new Url("http://localhost:4444/wd/hub"), TimeSpan.FromSeconds(60)); executor.BeforeRemoteHttpRequest += BeforeRemoteHttpRequestHandler; ICapabilities capabilities = new ChromeOptions().ToCapabilities(); IWebDriver driver = new RemoteWebDriver(executor, capabilities); }
public void BeforeRemoteHttpRequestHandler( object sender, BeforeRemoteHttpRequestEventArgs e) { // Note: WebRequest.DefaultWebProxy is an IWebProxy implementation. // This could be anything, from adding additional headers, to modifying // the content of the request. Use with extreme caution. e.Request.Proxy = WebRequest.DefaultWebProxy; e.Request.AutomaticDecompression = DecompressionMethods.GZip }
(On behalf of Samuel Bétrisey) Add support for Basic Access Authentication in .NET RemoteWebDriver. The username and password of the Uri wasn't used by the HttpWebRequest. Usage example:
new RemoteWebDriver(new Uri("http://user:pass@example.com/wd/hub"), DesiredCapabilities.Chrome());
(On behalf of "granak") Null cookie value fix. Cookies with empty string values would throw exceptions.
Enabled reconstitution of .NET FirefoxOptions from raw capabilities. This is a temporary measure until DesiredCapabilities is done away with for good. Fixes issue #4855.
Modified to write screenshots using the Save overload that takes a System.IO.FileStream object. Rather than using the Image.Save overload that takes a string containing the file name, we should use a FileStream. The FileStream object handles validating the existence of the path to which one is attempting to write, so this will avoid the cryptic GDI+ error that occurs if the file already exists. Additionally, the SaveAsFile method now does what it says on the tin, that the file will be overwritten if it already exists. Fixes issue #4645.
(On behalf of Sean Rand) Added overload argument to the SelectElement.SelectByText method. The XML summary informs that the method provides partial match ability on the options by Text. However this wasn't fully implemented so pushed the ability via a boolean to perform such a partial match on an options list. Fixes issue #3575.
(On behalf of Sean Rand) Added test playlists for each .NET test project in the repo. This is to help aid running of all tests in a specific project. Originally, this was intended to simply add a playlist for the support tests but adding playlists for all of the test projects is a better approach. Fixes issue #3805.
(On behalf of Arnon Axelrod) Added the new value of the element to the ElementValueChanged and ElementValueChanging event args. This commit also creates a new overload of OnElementChanging and OnElementChanged but also keeps the original overloads to preserve backward compatibility. Additionally, the original overloads are marked with the [Obsolete] attribute to let users know they should migrate to the new overloads.
Fixed proxy bypass address serialization for legacy .NET drivers. The W3C WebDriver Specification states that the list of addresses to bypass in a proxy configuration should be an array. The legacy OSS dialect of the protocol specifies it must be a string. This commit fixes the serialization for the non-spec-compliant case, serializing it as a semicolon-separated list. Fixes issue #5645.
Updating .NET to not propagate non-W3C compliant capability names. Fixes issue #5646.
Added new property for geckodriver --jsdebugger command line switch to FirefoxDriverService object.
(On behalf of Christopher Buttkus) Added LeftShift, LeftAlt, LeftControl, Command, and Meta as KeyDown/Up events for .NET
(On behalf of "vflame") Added ability to install Firefox addon using manifest.json. Firefox addons/extensions built with WebExtensions API have a manifest.json instead of install.rdf. When Selenium extract the addon/ extension id, it only looked for install.rdf. This fix adds extracting the addon/extension id from the manifest.json in addition to install.rdf. Fixes issue #4093.
(On behalf of Yevgeniy Shunevych) Fixed AddEncodedExtension methods of ChromeOptions and OperaOptions
Updated .NET strong-named assembly build to correct package references. Fixes issue #5511.
Updated WebDriverBackedSelenium .csproj file to embed resources. This step was omitted when the build process for the .NET bindings was migrated from crazy-fun to Buck. Fixes issue #5528.
Streamlined Actions class. The Actions class will now throw an exception on instantiation if the IWebDriver instance passed into the constructor does not also implement IActionExecutor. This will help folks who wrap the standard WebDriver driver classes to be able to continue to work with the Actions class.
Added support for intercepted element clicks. This adds a new exception, ElementClickInterceptedException to indicate when an element is obscured by a
ElementClickInterceptedException to indicate when an element is obscured
by another element. This allows users to distinguish between different
causes of elements not being clickable.SeleniumExtras.ExpectedConditions. This implementation
will be removed from the .NET language bindings in a future releaseSeleniumExtras.PageFactory. The implementation will be removedAdditionally, the property setting the preference has been deprecated, and will generate a compile-time warning. The property will be removed in a fut…
Updated build process and packaging to correctly distribute strongly- named releases. Fixes issue #5254 (for real, this time). No functional changes w
Added commands to get and set network conditions for Chrome in .NET. To get or set the network conditions, use the NetworkConditions property of the C
NetworkConditions property
of the ChromeDriver object. This property gets or sets a
ChromeNetworkConditions object which contains the proper values. Fixes
issue #5338.dotnet
build tools instead of calling the C# compiler directly, the creation of
strong-named assemblies was broken with incorrect references being created.
This commit fixes that problem. Fixes issue #5254.This also removes some obsolete API entry points that have been marked as deprecated for some months now. The properties of the ITimeouts object shoul…
Made .NET Interactions device classes public. Fixes issue #3989.
Deprecated selenium-webdriver/firefox/binary.Binary
remote.DriverService#kill()selenium-webdriver/firefox.Options:
selenium-webdriver/firefox/binary.Binaryselenium-webdriver/firefox.Options#useGeckoDriver()selenium-webdriver/firefox/profile.decode()selenium-webdriver/firefox/profile.Profile that had no
effect since support
for the legacy FirefoxDriver was dropped in 3.5.0:
selenium-webdriver/firefox.ServiceBuilder#setFirefoxBinary(); custom
binaries should be
configured through the firefox.Options class.selenium-webdriver/firefox.Capability. These hold overs from the
legacy FirefoxDriver
are no longer supported.error.ElementNotVisibleError in favor of the more generic
error.ElementNotInteractableError.httpOnly option when adding a cookie.Changed .NET ChromeOptions to use "goog:chromeOptions" as property name. This aligns with current chromedriver.exe expectations as well as with the W3
Deprecated the static methods on the DesiredCapabilities class's methods for specific browsers in .NET. For over a year, the guidance for .NET users h…
ToCapabilities method on the options
object.selenium-webdriver/firefox.Capability.MARIONETTE is deprecated.
Native support for Firefox 45 (ESR) has been removed. Users will have to connect to a remote Selenium server that supports Firefox 45.
SELENIUM_MARIONETTE environment variable no longer has an effect.selenium-webdriver/firefox.Capability.MARIONETTE is deprecated.selenium-webdriver/firefox.Options#useGeckoDriver() is deprecated and now
a no-op.firefox.Options will no longer discard the "moz:firefoxOptions" set in
user provided
capabilities (via Builder.withCapabilities({})). When both are used, the
settings
in firefox.Options will be applied last.chrome.Options#headless() and chrome.Options#windowSize(), which may
be used to start
Chrome in headless mode (requires Chrome 59+) and to set the initial window
size, respectively.error.WebDriverError#remoteStacktrace to capture the stacktrace
reported by a remote
WebDriver endpoint (if any).WebElement#sendKeys to send text as a string instead of an array of
strings.Deprecated the Timeouts class in favor of Options#setTimeouts(), which supports setting multiple timeouts at once.
This release requires geckodriver 0.15.0 or newer.
Options#getTimeouts() for retrieving the currently configured session
timeouts (i.e.
implicit wait). This method will only work with W3C compatible WebDriver
implementations.Timeouts class in favor of Options#setTimeouts(), which
supports setting
multiple timeouts at once.value
key.UseLegacyImplementation = true in the FirefoxOptions passed
to the constructor and not be forced to have a copy of geckodriver
available. Fixes issue #3597.Added warning log messages when the user creates new managed promises, or schedules unchained tasks. Users may opt in to printing these log messages w
Added warning log messages when the user creates new managed promises, or schedules unchained tasks. Users may opt in to printing these log messages with
const { logging } = require('selenium-webdriver')
logging.installConsoleHandler()
logging.getLogger('promise.ControlFlow').setLevel(logging.Level.WARNING)
If the JAVA_HOME environment variable is set, use it to locate java.exe.
Release skipped to stay in sync with the main Selenium project.
Deprecated promise.when(value, callback, errback). Use promise.fulfilled(value).then(callback, errback)
lib package is once again platform agnostic (excluding lib/devmode).promise.when(value, callback, errback).
Use promise.fulfilled(value).then(callback, errback)promise.fulfilled(value), promise.rejected(reason) and
promise.defer() to all use native promises when the promise manager is
disabled.selenium-webdriver/testing to export describe.only along with
describe.skip.selenium-webdriver/lib/until.ableToSwitchToFrame. It was previously
dropping arguments and
would never work.Deprecated promise.fulfilled(value), use promise.Promise#resolve(value)
promise.fulfilled(value), use promise.Promise#resolve(value)promise.rejected(reason), use promise.Promise#reject(reason)wait() condition times out, the returned promise will now be rejected
with
an error.TimeoutError instead of a generic Error object.WebDriver#wait() will now throw a TypeError if an invalid wait condition is
provided.(NOTICE) The minimum supported version of Node is now 6.9.0 LTS
(NOTICE) The minimum supported version of Node is now 6.9.0 LTS
Removed support for the SafariDriver browser extension. This has been replaced by Apple's safaridriver, which is included with Safari 10 (available on OS X El Capitan and macOS Sierra).
To use Safari 9 or older, users will have to use an older version of Selenium.
geckodriver v0.11.0 or newer is now required for Firefox.
Fixed potential reference errors in selenium-webdriver/testing when users
create a cycle with
mocha by running with mocha's --hook flag.
Fixed WebDriver.switchTo().activeElement() to use the correct HTTP method
for compatibility with
the W3C spec.
Update the selenium-webdriver/firefox module to use geckodriver's
"moz:firefoxOptions" dictionary for Firefox-specific configuration values.
Extending the selenium-webdriver/testing module to support tests defined
using generator
functions.
The promise manager can be disabled by setting an environment variable:
SELENIUM_PROMISE_MANAGER=0. This is part of a larger plan to remove the
promise manager, as
documented at
https://github.com/SeleniumHQ/selenium/issues/2969
When communicating with a W3C-compliant remote end, use the atoms library for
the WebElement.getAttribute() and WebElement.isDisplayed() commands. This
behavior is
consistent with the java, .net, python, and ruby clients.
safari.Options#useLegacyDriver()promise.Thenable for compatibility with native promises:
#isPending()#cancel()#finally()webdriver.WebDriver to overload the static
function WebDriver.createSession() instead of doing work in the constructor.
All constructors
now inherit the base class' function signature. Users are still encouraged to
use the Builder
class instead of creating drivers directly.Builder#build() now returns a "thenable" WebDriver instance, allowing users
to immediately
schedule commands (as before), or issue them through standard promise
callbacks. This is the same
pattern already employed for WebElements.Builder#buildAsync() as it was redundant with the new semantics of
build().Modified to use automation atoms for getAttribute and isDisplayed in .NET for W3C remote ends
Updated GetAttribute shim for GetAttribute method for W3C protocol remote ends.
Constructors of FirefoxDriver directly referencing FirefoxProfile or FirefoxBinary have been marked as deprecated, and will be removed in a future rel…
FIXED: for consistency with the other language bindings, remote.FileDetector will ignore paths that refer to a directory.
remote.FileDetector
will ignore paths that refer to a directory.…and WebElement#isElementPresent() have been deprecated. These methods will be removed in v3.0. Use the findElements command to test for the presence o…
Added preliminary support for Marionette, Mozilla's WebDriver implementation
for Firefox.
Marionette may be enabled via the API,
firefox.Options#useMarionette, or by setting the SELENIUM_MARIONETTE
environment variable.
Moved all logic for parsing and interpreting responses from the remote end
into the
individual command.Executor implementations.
For consistency with the other Selenium language bindings,
WebDriver#isElementPresent() and WebElement#isElementPresent() have been
deprecated. These
methods will be removed in v3.0. Use the findElements command to test for the
presence of an
element:
driver.findElements(By.css('.foo')).then(found => !!found.length);
Added support for W3C-spec compliant servers.
For consistent naming, deprecating error.InvalidSessionIdError in favor of
error.NoSuchSessionError.
Moved the error module to lib/error so all core modules are co-located.
The top-level error
module will be removed in v3.0.
Moved until.Condition and until.WebElementCondition to the webdriver
module to break a
circular dependency.
Added support for setting the username and password in basic auth pop-up dialogs (currently IE only).
Deprecated WebElement#getInnerHtml() and WebEleemnt#getOuterHtml()
Deprecated Promise#thenCatch() - use Promise#catch() instead
Deprecated Promise#thenFinally() - use promise.thenFinally() instead
FIXED: io.findInPath() will no longer match against directories that have
the same basename as
the target file.
FIXED: phantomjs.Driver now takes a third argument that defines the path to
a log file to use
for the phantomjs executable's output. This may be quickly set at runtime with
the SELENIUM_PHANTOMJS_LOG environment variable.
element.sendKeys(...) to send the key sequence as an array where
each element defines a
single key. The legacy wire protocol permits arrays where each element is a
string of arbitrary
length. This change is solely at the protocol level and should have no
user-visible effect.Added promise.Promise#catch() for API compatibility with native Promises. promise.Promise#thenCatch() is not yet deprecated, but it simply delegates t…
Starting with v2.52.0, each release of selenium-webdriver will support the latest minor LTS and stable Node releases. All releases between the LTS and stable release will have best effort support. Further details are available in the selenium-webdriver package README.
webdriver.Builder#buildAsync(), which returns a promise that will be
fulfilled with the
newly created WebDriver instance once the associated browser has been full
initialized. This is
purely a convenient alternative to the existing build() method as the
WebDriver class will always
defer commands until it has a fully created browser.firefox.Profile#setHost() which may be used to set the host that the
FirefoxDriver's
server listens for commands on. The server uses
"localhost" by default.promise.Promise#catch() for API compatibility with native Promises.
promise.Promise#thenCatch() is not yet deprecated, but it simply delegates
to catch.io operations to use native promises.command.Executor#execute() and HttpClient#send() to return
promises instead of using
callback passing.Serializable class with an internal, Symbol-defined method.Capabilities class to extend the native Map type.Capabilities.has(key) to only test if a capability has been set
(Map semantics). To check whether the value is true, use get(key).executors.DeferredExecutor in favor of
lib/command.DeferredExecutor.error module to export an Error subtype for each type of error
defined in
the W3C WebDriver spec.http.Request and http.Response classes to store headers in
maps instead of object
literals.ws dependency to version 1.0.1.testing/assert module.By locators that are not in the W3C spec to delegated to using
CSS
selectors: By.className, By.id, By.name, and By.tagName.Updated Firefox driver which includes fixes for the clicking in overlapped elements. In keeping with project support policy for Firefox, This driver h
Changed ChromeOptions to have correct EnableMobileEmulation API.
Removed deprecated PageFactory code.
Updated .NET PageFactory to allow frame switching with located elements. Previously, if you located a or element using the PageFactory attributes, you
<frame> or <iframe> element using the
PageFactory attributes, you could not switch to it. This change allows one
to use driver.SwitchTo().Frame(element) with the element found via the
PageFactory.Added WebElement#takeScreenshot().
WebElement#takeScreenshot().FIXED: Adjusted how the control flow tracks promise callbacks to avoid a potential deadlock.
Node v0.12.x users must run with --harmony. _This is the last release that will support v0.12.x_
Node v0.12.x users must run with --harmony. This is the last release that will support v0.12.x
FIXED: (Promise/A+ compliance) When a promise is rejected with a thenable, the
promise adopts the
thenable as its rejection reason instead of waiting for it to settle. The
previous (incorrect)
behavior was hidden by bugs in the promises-aplus-tests compliance test
suite that were fixed in
version
2.1.1.
FIXED: the webdriver.promise.ControlFlow now has a consistent execution
order for
tasks/callbacks scheduled in different turns of the JS event loop. Refer to
the webdriver.promise documentation for more details.
FIXED: do not drop user auth from the WebDriver server URL.
FIXED: a single firefox.Binary instance may be used to configure and launch
multiple
FirefoxDriver sessions.
var binary = new firefox.Binary();
var options = new firefox.Options().setBinary(binary);
var builder = new Builder().setFirefoxOptions(options);
var driver1 = builder.build();
var driver2 = builder.build();
FIXED: zip files created for transfer to a remote WebDriver server are no longer compressed. If the zip contained a file that was already compressed, the server would return an "invalid code lengths set" error.
FIXED: Surfaced the loopback option to remote/SeleniumServer. When set,
the server will be
accessed using the current host's loopback address.
This is the last release for selenium-webdriver that will support ES5. Subsequent releases will depend on ES6 features that are enabled by default in
This is the last release for selenium-webdriver that will support ES5.
Subsequent releases will depend on ES6 features that are enabled by
default in Node v4.0.0. Node v0.12.x will
continue to be supported, but will require setting the --harmony flag.
ws dependency from 0.7.1 to 0.8.00.10.x to 0.12.x. This
is in accordance with
the Node support policy established in v2.45.0.Removed deprecated enum values: ErrorCode.NO_MODAL_DIALOG_OPEN and ErrorCode.MODAL_DIALOG_OPENED. Use ErrorCode.NO_SUCH_ALERT and ErrorCode.UNEXPECTED…
webdriver.logging module. For usage, see
example/logging.js.Builder#usingWebDriverProxy()
for more info.ErrorCode.NO_MODAL_DIALOG_OPEN and
ErrorCode.MODAL_DIALOG_OPENED. Use ErrorCode.NO_SUCH_ALERT and
ErrorCode.UNEXPECTED_ALERT_OPEN, respectively.promise.ControlFlow will maintain state for promise chains
generated in a loop.promise.ControlFlow#wait() now has consistent semantics for an
omitted or 0-timeout: it
will wait indefinitely.remote.DriverService#start() will now fail if the child process dies
while waiting for
the server to start accepting requests. Previously, start would continue to
poll the server
address until the timeout expired.-silent flag to preheat the profile.
Starting with
Firefox 38, this would cause the browser to crash. This step, which was first
introduced for
Selenium's java client back with Firefox 2, no longer appears to be required.firefox.Driver#quit() will wait for the Firefox process to
terminate before
deleting the temporary webdriver profile. This eliminates a race condition
where Firefox would
write profile data during shutdown, causing the rm -rf operation on the
profile directory to
fail.Supports native events for Firefox version 31 (immediately previous ESR). Native event support has been discontinued for versions of Firefox later than 33. Synthetic events tested on Firefox versions 31 (immediately previous ESR), 37 (immediately previous release), and 38 (current release, and current ESR).
(on behalf of Darrin Cherry) Modified ExpectedConditions class to more closely mimic the one provided by Java.
Added ToString override to Platform class. Fixes issue #580.
Removed Firefox profile cleaning step when launching Firefox. Firefox used to require launching to clean up potential issues with the anonymous temporary profile that we use with the driver. This is no longer the case.
Added type safe support to InternetExplorerOptions for page load strategy.
Added ability to get wrapped IWebElement from SelectElement. When using a SelectElement wrapper class to manipulate <select> elements, the user previously had to keep a separate reference to the IWebElement representing the actual element. The SelectElement class now implements IWrapsElement, exposing the WrappedElement property, which gives the user the ability to access the underlying IWebElement. Fixes issue #350.
(on behalf of clz.livio) Added additional PhantomJS command-line options. Added the ProxyAuthorization property and SslCertificatesPath property to the PhantomJSDriverSerivce class. These translate to the --proxy-auth and --ssl-certificates-path command line options on PhantomJS respectively.
(on behalf of clz.livio) Improved DriverService to check response on startup. A driver using a driver service will now throw a WebDriverException if it cannot start the driver service, or if the service executable returns an invalid response. Note that the checks for the validation of the responses is minimal, checking for the Content-Type header and that the response code is a 200.
(on behalf of Sergey Tikhomirov) Refactored PageFactory implementation, including a number of changes to make it more extensible and more robust.
First, instead of the hand-rolled proxy classes that had been used previously, this refactor introduces proxy objects based on System.Runtime.Remoting.Proxies.RealProxy, which allows for more flexibility in the types of objects proxied.
Second, this refactor now allows users to provide their own implementation engines for examining attributes of Page Object classes and determining what course to take. To create a new implementation the user must provide an implementation of the IPageObjectMemberDecorator interface, which determines which attributes to examine fields and properties for, and how to create the proxy objects assigned to the members.
Third, this refactor introduces a new IElementLocator interface to Page Object implementations, and deprecates the IElementLocatorFactory interface. The IElementLocator interface is substantially similar to the now-deprecated IElementLocatorFactory, but requires implementations to provide a property to retrieve the ISearchContext implementation used to actually find elements. The implications of this change are that IElementLocator implementations will need to keep a reference to the IWebDriver or IWebElement they are using. Recommended practice is for this context to be passed in via a the IElementLocator implementation's constructor, and this technique is demonstrated in the source code to the two implementations provided in the regular .NET language bindings releases.
Finally, this commit also introduces a breaking change in IElementLocatorFactory. Developers of classes that implement this interface will now be required to implement the CreateLocator method, which will return a valid IElementLocator implementation. This is to prepare for the removal of the IElementLocatorFactory interface and its implementations in a future release.
Added FindsByAllAttribute to .NET PageFactory implementation. This allows the user to specify that an element must match the criteria of all of the FindsBy attributes a property or field is marked with in order to be found by the PageFactory. Previously, a class member marked with multiple FindsBy attributes would find an element matching any of the attributes' criteria. Because of the nature of this change, you cannot use FindsBySequence and FindsByAll on the same class member. Attempting to do so will result in an exception when InitElements is called.
(on behalf of Immanuel Hayden) Added support for ByAll, finding elements matching all locators.
(on behalf of Chris Block) Changed ExecuteJavaScript extension method for converting result, so that it now validates that the ExecuteJavaScript extension method will correctly detect if the script result is convertible to the generic type.
(on behalf of Yi Zeng) Added constructor overload which takes in single DriverService parameter. This pattern was already implemented in PhantomJSDriver, but not yet in ChromeDriver and InternetExplorerDriver.
Added ability to add custom wire protocol commands in .NET bindings. This allows projects that use a WebDriver-like JSON-over-HTTP wire protocol to add additional end points for their use. It does this by exposing (and renaming) a formerly internal method on the singleton CommandInfoRepository class. To add additional commands, one would call the TryAddCommand method, which is now public. Fixes Google Code issue #8594.
Added ability to handle W3C spec compliant element serialization.
(on behalf of Eberhard Beilharz) Made PhantomJS driver more cross-platform aware. On Linux the filesystem is case-sensitive and executables don't end with ".exe". This change modifies the PhantomJSDriver to search for "phantomjs" on Unix systems while keeping the filename "PhantomJS.exe" on Windows. This allows to use the default constructor of the PhantomJSDriver class on Linux. Previously using the default c'tor resulted in an error that "PhantomJS.exe" can't be found.
Deprecating promise.ControlFlow#getHistory, promise.ControlFlow#clearHistory, and promise.ControlFlow#annotateError. These functions were all intended…
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 the until module, which defines common explicit wait conditions. Sample usage:
Added the until module, which defines common explicit wait conditions.
Sample usage:
var firefox = require('selenium-webdriver/firefox'),
until = require('selenium-webdriver/until');
var driver = new firefox.Driver();
driver.get('http://www.google.com/ncr');
driver.wait(until.titleIs('Google Search'), 1000);
FIXED: 8000: Builder.forBrowser() now accepts an empty string since some
WebDriver
implementations ignore the value. A value must still be specified, however,
since it is a required
field in WebDriver's wire protocol.
FIXED: 7994: The stacktrace module will not modify stack traces if the
initial parse fails (e.g.
the user defined Error.prepareStackTrace)
FIXED: 5855: Added a module (until) that defines several common conditions
for use with explicit
waits. See updated examples for usage.
Fixed an issue with flakiness when setting up the Firefox profile that could prevent the driver from initializing properly.
For consistency with other language bindings, deprecated UnhandledAlertError#getAlert and added #getAlertText. getAlert will be removed in 2.45.0.
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.
Supports native events for Firefox versions 32 (current), 31 (immediately previous release and current ESR), and 24 (immediately previous ESR).
Integrated the Microsoft Internet Explorer driver implementation into the .NET bindings. By setting the Implementation property of the .NET bindings' InternetExplorerDriverService class, the user can now force the driver to use the Microsoft implementation. Note that the default is to use the existing open-source implementation based on the Automation Atoms. Over time as the Microsoft implementation matures, this will be switched to use the Microsoft implementation, first by default, then exclusively.
To use the Microsoft implementation, the user must have the August 2014 updates to Internet Explorer installed through Windows Update, and must install the IE Web Driver Tool for Internet Explorer 11 download from Microsoft (http://www.microsoft.com/en-us/download/details.aspx?id=44069).
Added safe check for window.localStorage in .NET WebDriverBackedSelenium implementation. Patch provided by Timofey Vasenin.
Implemented pluggable element locator factories for .NET PageFactory. This change allows the user to specify a custom IElementLocatorFactory for locating elements when used with the PageFactory. This gives much more control over the algorithm used to locate elements, and allows the incorporation of things like retries or handling of specific exceptions.
Issue #7367: Set Json.NET to ignore dates when parsing response values.
Issue #7419: Added support for SwitchTo().ParentFrame() in .NET bindings. This brings the .NET bindings into parity with other languages.
Belatedly removed long-obsolete .NET tests for AndroidDriver.
Removed deprecated functions Promise#addCallback(), Promise#addCallbacks(), Promise#addErrback(), and Promise#addBoth().
Promise#addCallback(),
Promise#addCallbacks(), Promise#addErrback(), and Promise#addBoth().FIXED: 7138: export logging API from webdriver module.
this for Mocha tests.Deprecated Promise#addCallback(), Promise#addCallbacks(), Promise#addErrback(), and Promise#addBoth().
promise.all, promise.map, and promise.filterPromise#thenCatch() and Promise#thenFinally().Promise#addCallback(), Promise#addCallbacks(),
Promise#addErrback(), and Promise#addBoth().webdriver.WebDriver#getCapability.Version bump to stay in sync with the Selenium project.
Supports native events for Firefox versions 26 (current), 25 (immediately previous), 24 (current ESR), and 17 (immediately previous ESR)
Deprecated .NET AndroidDriver class. Going forward, the recommended approach is to use a third-party implementation for Android, such as Selendroid (http://selendroid.io/) or Appium (http://appium.io/).
Added experimental IWebDriver extension methods to .NET support classes. This commit adds extension methods to IWebDriver, which can be used to reduce the amount of type casting that must be done to access functionality not provided by the base IWebDriver interface. The following methods were added:
These extension methods should be considered experimental. To use them requires a reference to WebDriver.Support.dll, and adding a using clause for OpenQA.Selenium.Support.Extensions.
When a promise is rejected, always annotate the stacktrace with the parent flow state so users can identify the source of an error.
webdriver.WebElement#getAttributeFIXED: 6346: The remote.SeleniumServer class now accepts JVM arguments using the jvmArgs option.
jvmArgs option._Release skipped to stay in sync with main Selenium project._
Your coding agent can read these notes before it upgrades. Set up the MCP server →