4.45.0 (2026-06-15)
=========================
* Support CDP versions: v147, v148, v149
* deprecate curb http client support (#17443)
* move Ruby bindings to use typescript get attribute atom (#17524)
* Move atoms to use the typescript versions (#17532)
* deprecate Chromium Profile classes (#17557)
* update bazel test tags (#17558)
* separate concerns between Service, DriverFinder, and Options (#17564)
* fix using environment variables to set drivers (#17571)
* create more obvious test guard keywords as aliases (#17636)

4.44.0 (2026-05-12)
=========================
* Support CDP versions: v146, v147, v148
* Modern Firefox does not like both the `-v` and `--log` flags at the same time (#17412)
* Fix credential issue with private key (#17188)

4.43.0 (2026-04-09)
=========================
* Support CDP versions: v145, v146, v147

4.42.0 (2026-04-08)
=========================
* Support CDP versions: v144, v145, v146

4.41.0 (2026-02-19)
=========================
* Support CDP versions: v143, v144, v145
* remove stored atoms these get generated by build (#16971)
* output driver logs when SE_DEBUG is enabled (#16901)
* Update lint configuration and fix rubocop offenses (#17008)
* add missing unit tests (#17025)
* [grid] Add session event API for server-side event bus integration (#17015)
* Update dependencies (#17111)

4.40.0 (2026-01-18)
=========================
* add synchronization and error handling for socket interactions (#16487)
* mark low level bidi implementation as private api (#16475)
* ensure driver process is always stopped (#15635)
* create user-friendly method for enabling bidi (#14284)
* Add force encoding to remove warnings caused by json 3.0 (#16728)
* use SE_DEBUG to enable debugging (#16816)
* ensure the grid is properly restarted in tests when there is a problem (#16842)
* wait for grid to be ready when starting server (#16896)
* check driver status endpoint rather than socket connection (#16877)
* [build] update ruby gems with bazel (#16924)

4.39.0 (2025-12-06)
=========================
* Add CDP for Chrome 143 and remove 140

4.38.0 (2025-10-24)
=========================
* Add CDP for Chrome 142 and remove 139
* Fix BiDi Network issue by removing nil values on network requests (#16442)
* Remove cruft from old CI environment (#16473)
* [bidi] remove deprecated classes for log inspector (#16474)

4.37.0 (2025-10-16)
=========================
* Add CDP for Chrome 141 and remove 138
* Update Chrome/Edge args for test environment (#16376)
* Remove `prism` dependency (#16437)
* Remove `json` version constraint (#16436)

4.36.0 (2025-09-18)
=========================
* Add CDP for Chrome 140 and remove 137
* [BiDi] Create browser module, added user context related methods (#15371)
* BiDi get client windows (#16211)
* Fix links to exception documentation on website (#16305)
* Update `unhandled_prompt_behavior` capability to support hash syntax (#16289)

4.35.0 (2025-08-12)
=========================
* Add CDP for Chrome 139 and remove 136
* Fix typos in javascript & rb (#16019)
* Allow to use `rubyzip` v3 (#16108)

4.34.0 (2025-06-29)
=========================
* Add CDP for Chrome 138 and remove 135
* Fix child process terminate method when a process is already terminated (#15789)
* Deprecate ftp proxy (#15926)
* Add macOS key mappings for Options and Function keys (#15959)

4.33.0 (2025-05-23)
=========================
* Add CDP for Chrome 137 and remove 134
* Let firefox choose the bidi port by default (#15727)
* Upgrade to Ruby 3.2

4.32.0 (2025-05-02)
=========================
* Add CDP for Chrome 136 and remove 133
* log at info level with names and values when Guards#add_condition used
* Add PrintOptions Implementation for Ruby WebDriver (#15158)
* [ruby] fix lint for print_options.rb (#15608)
* add enable_downloads to attr_accessor for all options classes
* make logging of test guards debug level not info
* Set remote active protocol in Firefox to BiDi only
* handle issue with selenium manager exit status being nil (#15676)
* Add websocket-port parameter to firefox service (#15458)

4.31.0 (2025-04-04)
=========================
* Add support for 135 and remove 132
* Remove the pre-compiled atoms from trunk
* Allow symbols again to be passed on delete_cookie (#15519)

4.30.1 (2025-03-22)
=========================
* put back the driver#script method that was inadvertently deleted

4.30.0 (2025-03-20)
=========================
Ruby:
* Raise error when trying to delete a cookie without a name  (#15386)
* Remove deprecated html 5 web storage features
* Remove deprecated script alias for execute_script
* Add debug message for location of screenshot

BiDi:
* Add set viewport for browsing context (#15290)
* Add support for handling user prompt (#15291)
* Add Browser context activate command (#15365)

DevTools:
* Add support for 134 and remove 131
* Remove support for v85 since no longer required by Firefox
* Add support for additional target types (#15416)

4.29.1 (2025-02-22)
=========================
* [rb] Fix "no anonymous block parameter" in ruby 3.1 (#15315)

4.29.0 (2025-02-17)
=========================
* Add CDP for Chrome 133 and remove 130
* [rb] Add Bidi Network Response Handler (#14900)
* [rb] Remove Firefox CDP (#15200)
* [rb][BiDi] Add support for provide response command (#15080)
* [rb][BiDi] Add set cache behaviour (#15114)

4.28.0 (2025-01-16)
=========================
* Add CDP for Chrome 132 and remove 129
* [ci] Bumping versions for nightly
* [rb] Add tests for the cookie named, and updates type (#14843)
* [rb] Update note for return value of Hash (#14845)
* [rb] BiDi Network: add_request_handler, remove_request_handler, clear_request_handlers (#14751)
* Update supported versions for Chrome DevTools

4.27.0 (2024-11-21)
=========================
* Add CDP for Chrome 131 and remove 128
* Add Firefox CDP deprecation warnings (#14763)
* Add Bidi network commands for authentication and interception (#14523)
* Handle graceful webdriver shutdown (#14430)
* Reduce RBS errors to 0 (#14661)
* Resolve `uri` gem deprecation warning (#14770)
* Update minimum Ruby to 3.1 (#14685)
* Implement navigation commands with BiDi (#14094)

4.26.0 (2024-10-28)
=========================
* Add CDP for Chrome 130 and remove 127
* Add missing RBS methods (#14621)
* Update Ruby BiDi script structs to match spec
* Add RBS type support for BiDi related classes (#14611)

4.25.0 (2024-09-19)
=========================
* Add CDP for Chrome 129 and remove 126
* Fix add_cause method not being able to process an array of hashes (#14433)
* replace `fedcm` links with new ones (#14478)
* Allow driver path to be set using ENV variables (#14287)

4.24.0 (2024-08-23)
=========================
* Deprecate WebStorage JS methods (#14276)
* BUGFIX: Add stamp to nightly build (#14320)
* Add timeout and tests for curb, also added the gem curb that was not part of selenium (#14285)
* Add CDP for Chrome 128 and remove 125

4.23.0 (2024-07-18)
=========================
* Add FedCM support to the ruby selenium client (#13796)
* Add URLs constant to update error messages (#14174)
* Update selenium manager types (#14189)
* Add backtrace locations and cause to errors (#14170)
* Add CDP for Chrome 127 and remove 124

4.22.0 (2024-06-20)
=========================

* Force UTF-8 encoding on logger (see #6937)
* Don't crash when ChildProcess is already killed (see #14032)
* Manage bidi instance on the bridge not the driver (#14071)
* Implement High Level Logging API with BiDi (#14073)
* Fix bug with message deletion in Guard class
* Change output for Guard class
* Implement toggle for BiDi and Classic implementations (#14092)
* Add preference to enable CDP in Firefox by default (#14091)
* Add support for the w3c silent option for the ruby library (#14152)
* Add CDP for Chrome 126 and remove 123

4.21.1 (2024-05-16)
=========================

* Fixed missing Chrome binary error in Rails system tests.

4.21.0 (2024-05-16)
=========================

* Add CDP for Chrome 125 and remove 122
* Initial extensibility points for Appium
  * Support registering extra headers in HTTP client
  * Support overriding User-Agent in HTTP client
  * Support registering extra bridge commands
  * Support overriding default locator conversion
  * Support registering custom finders for SearchContext
  * Support using custom element classes

4.20.1 (2024-04-25)
=========================

* Returned accidentally removed DriverFinder.path and deprecated it.

4.20.0 (2024-04-24)
=========================

* Add CDP for Chrome 124 and remove 121
* Making Selenium Manager a thin wrapper (#13386)
  * This change has been made to make it easier to maintain and improve, the interface has
  changed and if users were invoking it, they might experience issues. Selenium Manager is
  still in beta and these type of changes are expected.

4.19.0 (2024-03-27)
=========================

* Add CDP for Chrome 123 and remove 120
* Avoid over-escaping browser path (#13632)
* Add full RBS support (#13234)

4.18.1 (2024-02-19)
=========================

* Add CDP for Chrome 122 and remove 119

4.18.0 (2024-02-19)
=========================

* Update documentation link in readme (#13570)
* make suggested updates from rubocop

4.17.0 (2024-01-22)
=========================

* Logger defaults output to stderr instead of stdout
* Fully support Chrome 120+ old headless mode (#13271)
* Add ruby to Selenium Manager input for tracking (see #13288)
* Define default command_list (fixes #13307)
* Fix issues with incorrectly named edge browser
* Check for whether driver supports full page screenshots to error (#12799)
* Add CDP for Chrome 121 and remove 118

4.16.0 (2023-12-06)
=========================

Ruby:
* Add RBS files to Ruby (#12844)
* Convert binary locations for cygwin (#12618)
* Allow Selenium Manager to work with Unix (#13161)
* Extend RBS support for logger and log entry (#13192)
* Update rules_ruby to the latest version (#13235)

BiDi:
  * Released selenium-devtools 0.120.0 (supports CDP v85, v118, v119, v120)

Chrome:
* Fix http proxy configuration for chrome (#13093)

Firefox:
* Delete 'lock' file in FF profile (#13090)

4.15.0 (2023-11-01)
=========================

* Do not set browser binary in selenium manager if it is an empty string (#12738)
* Add flaky condition to guards to mark unreliable tests
* Rake update needs to build latest grid for running remote tests
* Add CDP v119 and remove v116
* Implement file downloads (#12979)

4.14.0 (2023-10-09)
=========================
Ruby:
  * allow users to access the full script of the atom directly

BiDi:
  * Released selenium-devtools 0.118.0 (supports CDP v85, v116, v117, v118)

4.13.1 (2023-09-25)
=========================
Ruby:
  * Fix bug preventing logging chromedriver to file

4.13.0 (2023-09-25)
=========================
Ruby:
  * Fix bug preventing using performance logging with chromium
  * Allow users to set Selenium Manager path by environment variable (#12752)
  * Allow service to be started before the driver
  * remove deprecated driver extensions for location and network connection

BiDi:
  * Released selenium-devtools 0.117.0 (supports CDP v85, v115, v116, v117)

4.12.0 (2023-08-31)
=========================
Ruby:
  * Fix bug preventing good error messages in Selenium Manager when stdout empty
  * Fix bug with Firefox not loading net/http library by default (#12506)
  * Remove support for using capabilities in local drivers

BiDi:
  * Released selenium-devtools 0.116.0 (supports CDP v85, v114, v115, v116)

4.11.0 (2023-07-31)
=========================
Ruby:
  * Made network interception threads fail silently (#12226)
  * Have Selenium Manager binary locate drivers on PATH (#12345)
  * Add browser output from selenium manager to options (#12398)
  * Remove deprecated code (#12417)
BiDi:
  * Released selenium-devtools 0.115.0 (supports CDP v85, v113, v114, v115)
Edge:
  * Adding ignore process match for IE Mode across bindings (#12279)

4.10.0 (2023-06-07)
=========================
Ruby:
  * Implement proxy support for Selenium Manager
  * Prevent setting driver log level in Safari
  * Change all Selenium Manager logging to :debug (#12145)
  * Error messages include links to documentation
  * Add custom error class for driver location and improve error logic

BiDi:
  * Released selenium-devtools 0.114.0 (supports CDP v85, v112, v113, v114)

Edge:
  * Add support for webview2

4.9.1 (2023-05-08)
=========================
Ruby:
  * Allow users to specify driver process output in Service class (#11964)
  * Updated minimum required Ruby version to 3.0
  * Selenium Logger defaults to :info and all debugging is now logged as :debug (#11967)
  * Every logging entry can be ignored based on ID, not just warnings
  * Logging entries can be filtered to allow or ignore specific IDs

BiDi:
  * Fix bug with loading devtools (#11931) (thanks Boris Petrov!)
  * Released selenium-devtools 0.113.0 (supports CDP v85, v111, v112, v113)

4.9.0 (2023-04-21)
=========================
Ruby:
  * Fix devtools version fallback (#11869)
  * Fix bug in selenium manager escaping back slashes in Windows (#11884)

BiDi:
  * Released selenium-devtools 0.112.0 (supports CDP v85, v110, v111, v112)

4.8.6 (2023-03-29)
=========================
Ruby:
  * Properly escape arguments passed to Selenium Manager

4.8.5 (2023-03-28)
=========================
Ruby:
  * Wrapping browser name in quotes when calling Selenium Manager

4.8.4 (2023-03-28)
=========================
Ruby:
  * Update the selenium-manager versions to fix an IE naming issue (#11828)

4.8.3 (2023-03-26)
=========================
Ruby:
  * Still need to use driver finder when using capabilities parameter
  * Accommodate Driver Finder being sent something other than an Options instance

4.8.2 (2023-03-24)
=========================
Ruby:
  * Ruby driver finder (#11523)
  * Using json output with Selenium Manager

BiDi:
  * Released selenium-devtools 0.111.0 (supports CDP v85, v109, v110, v111)

4.8.1 (2023-02-17)
=========================
Ruby:
  * Fix autoload of WebDriver::Remote::Bridge::COMMANDS
  * Subclass is setting value before the superclass is setting it to nil
  * Updating Selenium Manager binaries for 4.8.1 release

BiDi:
  * Released selenium-devtools 0.110.0 (supports CDP v85, v108, v109, v110)
  * Close BiDi session on closing the last top-level browsing context
  * Add filtering capability to LogInspector

4.8.0 (2023-01-23)
=========================
Ruby:
  * Allow updating instance variables on service classes
  * Deprecate extract_service_args processing in service classes
  * Fix bug preventing sending nil to #send_keys with Remote Driver
  * Fix bug with IE specific methods not available to IE Driver
  * Created Chromium superclass for Chrome and Edge
  * Deprecated platform and version setters/getters in Capabilities class
  * Revamped driver constructor logic
  * Fix bug preventing using Safari Technology Preview when using SafariOptions
  * Fix bug preventing more than one driver type to access Selenium Manager
  * Defaults to using Options instead of Capabilities
  * Make Options classes more strict for allowed arguments and types
  * Removed previously deprecated actions class parameters
  * Removed Location struct
  * Add comment with name of large JS executions (#11038)
  * update logger with link on how to use it (#11478)
  * Deprecate #add_option for Option classes in favor of constructor and attr_accessor
  * Deprecate all unrecognized capabilities for Options classes
  * Deprecate support for :capabilities for local drivers
  * Deprecate browser class methods for Capabilities
  * Deprecate #headless! for Chrome and Firefox

BiDi:
  * Released selenium-devtools 0.109.0 (supports CDP v85, v107, v108, v109)
  * Add LogInspector (#11368)
  * Add Browsing context commands (#11446)

4.7.1 (2022-12-02)
=========================
Ruby:
  * Fix bug preventing selenium manager from using Internet Explorer

4.7.0 (2022-12-01)
=========================
BiDi:
  * Released selenium-devtools 0.108.0 (supports CDP v85, v106, v107, v108)
  * Fix bug with socket stability

Ruby:
  * Remove dependency on ChildProcess gem in favor of native Process.spawn (#11251)
  * Add support for Selenium Manager to work with IE Driver
  * Improve error handling for Selenium Manager

Safari:
  * Fix bug preventing Safari Options from being used with Safari Technology Preview

4.6.1 (2022-11-04)
=========================
Ruby:
  * fix bug preventing selenium-manager from being executable by default

4.6.0 (2022-11-04)
=========================
BiDi:
  * Released selenium-devtools 0.107.0 (supports CDP v85, v105, v106, v107)

Ruby:
  * firefox scroll by amount is only failing on mac
  * add initial support for selenium manager
  * Revert "[rb] do not allow Select class to work with disabled selects"
  * Make sure selenium-manager is packed into gem
  * Fix platform list in #scroll_by guard

4.5.0 (2022-09-28)
=========================

BiDi:
  * Released selenium-devtools 0.105.0 (supports CDP v85, v103, v104, v105)
  * Released selenium-devtools 0.106.0 (supports CDP v85, v104, v105, v106)
  * Add HasBiDi support to Chrome

Ruby:
  * Fix bug in Platform code
  * Update Select class to error when elements are disabled (#10812)

Firefox:
  * Add support for installing unsigned add-ons (#10265, thanks TamsilAmani!)
  * Change accept_insecure_certificates to true by default (to match other bindings)
  * Set debugger_address option to true by default

Server:
  * Add support for initializing server class with arguments and log level

4.4.0 (2022-08-09)
=========================

BiDi:
  * Released selenium-devtools 0.103.1 to fix websocket dependency requirement
  * Released selenium-devtools 0.104.0 (supports CDP v85, v102, v103, v104)
  * Have network interceptor ignore cancelled requests (#10856)
  * Improve websocket message handling

Chromium:
  * Prevent users from setting w3c: false and warn for true (thanks Tamsil Amani!)

Ruby:
  * Implement Virtual Authenticator (#10903, #10541) (thanks Tamsil Amani!)

4.3.0 (2022-06-23)
=========================

BiDi:
  * Released selenium-devtools 0.103.0 (supports CDP v85, v101, v102, v103)

Ruby:
  * Allow specifying which button is clicked in pointer action class methods
  * Remove deprecated `Persistent` http class
  * Remove deprecated HasRemoteStatus module
  * Remove deprecated `Manager#new_window` and `Manager#logs`
  * `ActionBuilder#move_to` no longer attempts to move to top left corner of element
  * Remove deprecated support for sending Service parameters directly to Driver constructor
  * Remove deprecated setters and getters for driver path on Browser modules
  * Remove deprecated support for passing in options argument to Options class
  * Allow `:options` parameter to take `Options` instance argument like other languages
  * Remove deprecated support for `:desired_capabilities` & `:options` with `Hash` argument

4.2.1 (2022-05-31)
=========================

Ruby
  * Fix bug in setting default duration in Actions constructor

4.2.0 (2022-05-27)
=========================

BiDi:
  * Released selenium-devtools 0.97.0 (supports CDP v85, v95, v96, v97)
  * Released selenium-devtools 0.98.0 (supports CDP v85, v96, v97, v98)
  * Released selenium-devtools 0.99.0 (supports CDP v85, v97, v98, v99)
  * Released selenium-devtools 0.100.0 (supports CDP v85, v98, v99, v100)
  * Released selenium-devtools 0.101.0 (supports CDP v85, v99, v100, v101)
  * Released selenium-devtools 0.102.0 (supports CDP v85, v100, v101, v102)
  * Implement simple BiDi connection
  * Fix bug in initial BiDi implementation (thanks Boris Petrov!)
  * Fix bug with mutating headers in request interception (#10574)
  * Fix bug with empty response headers (thanks Viren Negi!)

Firefox:
  * Add support to Firefox Options for environment capability
  * Use addon parameter instead of path parameter to avoid using file detector
  * Restore #from_name method to Firefox profile (#10146)

Chromium:
  * Add support for casting desktop

Ruby:
  * Updated minimum required Ruby version to 2.7
  * Fix bug by not attempting to stop service process when it's not started (#10015)
  * Fix bug to not stop service process when it's not started (thanks Atsushi Tatsuma!)
  * Use driver endpoint to get page source instead of JavaScript
  * Add zenkaku_hankaku key support
  * Fix download support of Selenium Server
  * Do not convert Tag Name to CSS Selector

ActionBuilder:
  * Raise error if input device not found
  * Move `TypingInteraction` from `Interactions::KeyInput` to `Interactions` module
  * Throw better errors for `PointerInput` methods
  * Allow each action interaction class to validate its own source
  * Set all Interactions classes to private
  * Allow device names to use a default id if one is not specified
  * Deprecate default mouse and keyboard values in constructor, favoring devices parameter
  * Add support for pointer event properties
  * Implement scroll wheel support
  * Deprecate ordered pair parameters for pause method in favor of keywords
  * Deprecate move to element with offset changing origin to top left of element

4.1.0 (2021-11-22)
=========================

DevTools:
  * Released selenium-devtools 0.95.0 (supports CDP v85, v93, v94, v95)
  * Released selenium-devtools 0.96.0 (supports CDP v85, v94, v95, v96)
  * Added support for secure websockets (#10017)

Ruby:
  * Execute Script supports ShadowRoots (#10019)
  * Fixed bug preventing zipping temp files on Windows (#9987)
  * Sang Pumpkin Carol (thanks Jari!)

4.0.3 (2021-10-20)
=========================

Firefox:
  * Fixed bug avoiding camel casing prefs (#9944 thanks @glaszig)

Ruby:
  * Fixed bug in Select class for finding by index (#9945)

Remote:
  * Fixed bug preventing sending keys with an empty value

4.0.2 (2021-10-19)
=========================

Server:
  * Fixed bug in new download code.

4.0.1 (2021-10-19)
=========================

Server:
  * Fixed download by pointing to new storage location.
    - Only supports Selenium 4 versions
  * Added default value for Server::get and Server::download to use the latest server version

4.0.0 (2021-10-13)
=========================

Ruby:
  * Updated minimum required Ruby version to 2.6
  * Updated minimum required rexml gem version due to vulnerability

Chrome:
  * Added default values for Network Conditions so no longer need to specify everything

Firefox:
  * Fixed bug where Firefox prefs were converting snake case to camel case

4.0.0.rc3 (2021-10-08)
=========================

Ruby:
  * Added support for getting timeout values from the driver

4.0.0.rc2 (2021-09-30)
=========================

DevTools:
  * Released selenium-devtools 0.93.0 (2021-09-01)
    - adds CDP version 93
    - removes CDP version 91
  * Released selenium-devtools 0.94.0 (2021-09-22)
    - adds CDP version 94
    - removes CDP version 92
  * Added support for mutating responses in network interception

Ruby:
  * Implemented Options#add_option to work for vendor extension capabilities
  * Fixed bug for requiring uri (#9825 thanks @flanger001)
  * Moved New Window functionality to TargetLocator#new_window to be used with Driver#switch_to
  * Deprecated using Manager#new_window
  * Changed order of logging output (#9850)
  * Added support for web_socket_url capability

Chromium:
  * Implemented casting functionality
  * Implemented ability to launch chromium app
  * Implemented support for specifying permissions
  * Added support for Chrome-specific Android functionality with #enable_android

Firefox:
  * Implemented context functionality
  * Added support for Firefox-specific Android functionality with #enable_android

Remote:
  * Added support for file detector to install Firefox addons from client machine

4.0.0.rc1 (2021-09-01)
=========================

DevTools:
  * Released selenium-devtools 0.92.0 (2021-08-21) which:
    - adds CDP versions 92
    - removes CDP versions 88, 89, 90

IE:
  * Added options for running Microsoft Edge in IE mode with IE Driver

Remote:
  * Added default file detector for remote driver

Ruby:
  * Fixed bug for getting valid capability that has not been set
  * Fixed bug preventing loading of ServerError class

4.0.0.beta4 (2021-06-07)
=========================

Chrome:
  * Fixed bug with camel casing of localState object

Firefox:
  * Added support for Full Page Screenshots

Remote:
  * Added support for #execute_cdp on Chrome and Edge

Ruby:
  * Changed capabilities to use alwaysMatch instead of firstMatch by default
  * Fixed bug preventing Options classes from handling Proxy instances

4.0.0.beta3 (2021-04-13)
=========================

Chrome:
  * Fixed a regression with prefs hash keys being converted to camelCase.
  * Fixed an issue when passing Profile object to Options would fail.

DevTools:
  * Released selenium-devtools 0.91.0 which:
    - adds CDP versions 90 and 91
    - removes CDP versions 86 and 87

Remote:
  * Added support for setting alwaysMatch/firstMatch capabilities per W3C
    WebDriver specification. It's done using the following methods where
    `caps` is either a Ruby hash with desired capabilities or an instance
    of Remote::Capabilities:
      * Selenium::WebDriver::Remote::Capabilities.always_match(caps)
      * Selenium::WebDriver::Remote::Capabilities.first_match(caps)
  * Added support for Driver#save_print_page.
  * Fixed an issue with Driver#print_page.
  * Added support for setting timeouts capabilities in Remote::Capabilities
    per W3C WebDriver specification.
  * Added support for Element#aria_role which returns WAI-ARIA role of the element.
  * Added support for Element#accessible name which returns WAI-ARIA label of the element.
  * Added support for using DevTools version provided by Grid instead of
    calculating it manually

Ruby:
  * Remove JRuby-specific socket poller. Note that this requires JRuby 9.2.8.0+.

4.0.0.beta2 (2021-03-16)
=========================

DevTools:
  * Separated out DevTools methods into selenium-devtools gem to better manage versioning
  * Updated supported versions to 85-89
  * Add support for intercepting browser requests

Firefox:
  * Add support for using DevTools commands with Firefox Nightly

Remote:
  * Provide access to browser specific driver extensions as appropriate for designated browser
  * Add support for using DevTools commands via Grid

Ruby:
  * Spec Guard implementation moved into lib directory for other projects to use
  * Implemented `Element#dom_attribute` to obtain attribute value as defined by w3c specification
  * Implemented `Options#eq?`
  * Allow Options subclass instances to be created from class methods in superclass

Safari:
  * Fix bug that prevented usage of Safari Technology Preview

4.0.0.beta1 (2021-02-15)
=========================

DevTools:
  * Updated supported versions to 85-88

Edge:
  * Removed support for legacy Edge HTML

Firefox:
  * Fixed support for default profile settings
  * Added support for Devtools for Firefox v87+

Safari:
  * Removed default platformName specification so it works with Grid

Ruby:
  * Added support for httpOnly attribute in Cookies
  * Implemented `#print_page` method (thanks @raju249)
  * Fixed support for missing libraries in Ruby 3.0 (thanks @znz)
  * Deprecated `HTTP::Persistent` class
  * Fixed support for accessors in options classes
  * Added support for status endpoint for all browsers
  * Fix support for Browser, Driver, and Performance Logging in Chrome and Edge

4.0.0.alpha7 (2020-11-10)
=========================

Chrome:
  * Fixed a link to download ChromeDriver when it's not found (thanks @masakazutakewaka).
  * Fixed an issue when passing instance of Profile to an Options in capabilities
    (thanks @masakazutakewaka).

DevTools:
  * Added support for multiple version of CDP. Currently supported versions are
    84-87. The proper version is automatically selected when the browser is started
    based on its version. The implementation is Chromium-based and is confirmed
    to work in Chrome and Edge at least.
  * Added support for basic authentication (see HasAuthentication).
  * Added support for listening to JavaScript console messages (see HasLogEvents).
  * Added support for listening to JavaScript exceptions (see HasLogEvents).
  * Added support for listening to DOM mutations (see HasLogEvents).

Edge:
  * Switched default Edge implementation to Chromium-based. To use older versions
    of Edge, pass :edge_html when initializing the driver.

Firefox:
  * Fixed an issue whereby using the new capabilities structure in local drivers
    would cause the W3C check to complain that `browser_name` was an invalid
    capability key name (thanks @luke-hill)

Ruby:
  * Added support for taking screenshots of individual elements using Element#screenshot
    (thanks @johndouthat).
  * Fixed deprecation message of using Net::HTTP::Proxy (thanks @masakazutakewaka).
  * Fixed false negative detection of Linux on WSL2 (thanks @snsten).
  * Support ChildProcess 4.x versions (thanks @boutil).

Safari:
  * Fixed browser name in capabilities for Safari Technology Preview.

4.0.0.alpha6 (2020-05-28)
=========================

Chrome:
  * Added DevTools classes and methods generated from the CDP specification.
    It currently supports commands and events and provides Rubyish API:
      driver.devtools.page.navigate(url: 'http://google.com')
      driver.devtools.console.clear_messages
      driver.devtools.page.enable
      driver.devtools.page.on(:load_event_fired) do |params|
        puts("Page loaded in #{params['timestamp']}")
      end
    Check https://chromedevtools.github.io/devtools-protocol/ for more information
    about possible commands and events. Please note that this API is considered
    to be experimental and may change any time before stable 4.0 release.
  * Fixed an issue when passing :prompt_for_download (or similar snake_cased
    symbols) in Options#prefs would be ignored by Chrome because Selenium
    would internally convert it to camelCased format (:promptForDownload).
    Now :prefs are left intact.

Edge:
  * Fixed an issue when Driver#execute_cdp would not work for Chromium-based
    Edge browser.

Ruby:
  * Deprecated passing :desired_capabilities and :options to driver initialization
    in favor of :capabilities. They now can be combined in an array to make
    custom capabilities requirements:
      caps = Selenium::WebDriver::Remote::Capabilities.chrome
      opts = Selenium::WebDriver::Chrome::Options.new
      Selenium::WebDriver.for(:remote, capabilities: :chrome)
      Selenium::WebDriver.for(:remote, capabilities: caps)
      Selenium::WebDriver.for(:remote, capabilities: opts)
      Selenium::WebDriver.for(:remote, capabilities: [caps, opts])
  * Deprecated passing Hash to :capabilities in favor of Remote::Capabilities object.
  * Updated minimum require Ruby version to 2.5.
  * Improved keyword arguments handling to avoid warnings in Ruby 2.7.

4.0.0.alpha5 (2020-03-18)
=========================

The release is just to synchronize version with other bindings and does not
include any changes.

4.0.0.alpha4 (2020-01-09)
=========================

Ruby:
  * Added initial support for relative locators, which allow to find elements
    above/below/left/right/near another element. For example, you can find all
    the cells in a table to the right of your starting cell:
      start_cell = driver.find_element(css: 'td')
      right_cells = driver.find_elements(relative: {tag_name: 'td', right: start_cell})
    The documentation is still lacking so refer to examples in df6be2e962.
  * Added ability to silence certain logger messages by using it's identifiers:
      Selenium::WebDriver.logger.ignore(:driver_path)
  * Added new dependency: websocket. It's used for communicating with Chrome DevTools.
  * Loosened childprocess dependency to allow using version 2.0+.
  * Loosened rubyzip dependency to allow using version 2.0+.
  * Fixed Errno::EACCES error on Linux DeX and similar distributes

Chrome:
  * Added initial support for communicating with Chrome DevTools. The implementation
    is very basic and lacks CDP domains, events and types - those will be added
    in future releases. Still, it allows to execute simple commands to DevTools:
      driver.devtools.send('Page.navigate', {url: 'https://google.com'})

4.0.0.alpha3 (2019-07-08)
=========================

Ruby:
  * All documented driver capabilities supported in respective browser Options class by constructor and accessor
  * Driver constructor :options and :desired_capabilities generate the same capabilities for local and remote execution
  * Deprecated :options as keyword for initializing browser Options classes

Chrome:
  * Add support for browser logging with latest versions of chromedriver

Edge:
  * Add support for Chromium based implementation

4.0.0.alpha2 (2019-05-02)
=========================

Ruby:
  * Fixed an issue with previous alpha release which lead to removed files
    being packaged inside the gem

4.0.0.alpha1 (2019-05-01)
=========================

Ruby:
  * Removed Mouse and Keyboard as their implementations are not compliant to WebDriver specification
  * Removed TouchActionBuilder as its implementation is not compliant to WebDriver specification
  * Change ActionBuilder to be fully compliant to WebDriver specification
  * Change Manager to be fully compliant to WebDriver specification
  * Removed all deprecated errors that are not compliant to WebDriver specification
  * Update minimum required Ruby version to 2.4
  * Changed capabilities to use only those that are compliant to WebDriver specification
  * Removed deprecated timeout setter on default HTTP client
  * Removed deprecated Remote::W3C::Capabilities
  * Fixed an issue when services are not shutdown properly

Chrome:
  * Removed support for OSS mode - use W3C mode instead by using
    Selenium::WebDriver::Chrome::Options.new(options: {w3c: true})

PhantomJS:
  * Removed support for PhantomJS driver

Firefox:
  * Removed support for legacy Firefox driver - use GeckoDriver instead
  * Removed deprecated outdated capabilities
  * Fixed an issue when passing :profile string to Firefox::Options.new would
    result in NoMethodError. Now it will find a profile with such name on your
    system and use it accordingly (issue #7119)

3.142.7 (2019-12-27)
====================

Ruby:
  * Fix keyword argument deprecations in Ruby 2.7 (thanks @connorshea)

3.142.6 (2019-10-04)
====================

Ruby:
  * Loosen ChildProcess dependency so that 3.0+ can be used (thanks @jaredbeck)

3.142.5 (2019-10-01)
====================

Ruby:
  * Loosen RubyZip dependency so that 1.3+ can be used (thanks @vtamara)

3.142.4 (2019-09-02)
====================

Chrome:
  * Added support for new command for getting logs in ChromeDriver 76+
    with W3C mode on

3.142.3 (2019-05-21)
====================

Firefox:
  * Fixed a regression when Firefox binary path was not sent to GeckoDriver
    by default and browser could not be located (issue #7219)

3.142.2 (2019-05-11)
====================

Chrome:
  * Fixed an issue when getting/setting network conditions and sending CDP
    commands didn't work with Grid (issue #7174)

Safari:
  * Fixed an issue when getting/setting permissions and attaching debugger
    didn't work with Grid (issue #7174)

3.142.1 (2019-05-07)
====================

Firefox:
  * Fixed an issue when processing error in legacy driver would result
    in NoMethodError (issue #7178)

3.142.0 (2019-04-24)
====================

Ruby:
  * Fixed an issue when services are not shutdown properly

Firefox:
  * Fixed an issue when passing :profile string to Firefox::Options.new would
    result in NoMethodError. Now it will find a profile with such name on your
    system and use it accordingly (issue #7119)
  * Fixed an issue when instantiating Firefox driver with capabilities having
    :marionette would result in NoMethodError (issue #7120)

3.141.5926 (2019-04-18)
=======================

Ruby:
  * Fixed an issue when Selenium itself would print deprecation warning
    for TimeoutError
  * Fixed a regression when socket poller would raise Errno::EBADF on JRuby

3.141.592 (2019-04-18)
======================

Ruby:
  * Updated minimum required Ruby version to 2.3
  * Added support for ChildProcess 1.x
  * Improved socket connection waiting (thanks @N0xFF)
  * Changed waiting to use monotonic clock instead of Time class to avoid
    collisions with Timecop and similar gems
  * Removed deprecated PortProber.random
  * Added strictFileInteractability to the list of known capabilities
  * Added InsecureCertificateError
  * Added support for setting SOCKS version in proxy (issue #6938)
  * Implemented new window command using driver.manage.new_window. The command
    is supported by recent Firefox, Safari and IE drivers (thanks @dylanlive)
  * Added support for passing proc to driver_path setter in Service classes
  * Deprecated all errors which don't exist in WebDriver specification
  * Deprecated TouchActionBuilder which is not a part of WebDriver specification
    and is only supported by Chrome, but is likely to be dropped in v75.
    ActionBuilder should be used instead
  * Deprecated using Remote::W3C::Capabilities in favor of Remote::Capabilities

Chrome:
  * Added support for execute CDP commands using Driver#execute_cdp
  * Removed GPU disabling in ChromeDriver when using Options#headless!
  * Switched suggested download URL to HTTPS (thanks @JLLeitschuh)
  * Added support for instantiating service class directly and moved all driver
    executable configuration there (command-line arguments, port, etc.)
    Passing driver_opts, driver_path and port to driver initializer is now
    deprecated so use Selenium::WebDriver::Service.chrome instead, which allows
    to customize executable behavior in similar way. Once initialized, this
    object can be passed as :service keyword during driver initialization.
  * Deprecated Chrome.driver_path= in favor of Service::Chrome.driver_path=

Edge:
  * Added support for instantiating service class directly and moved all driver
    executable configuration there (command-line arguments, port, etc.)
    Passing driver_opts, driver_path and port to driver initializer is now
    deprecated so use Selenium::WebDriver::Service.firefox instead, which allows
    to customize executable behavior in similar way. Once initialized, this
    object can be passed as :service keyword during driver initialization
  * Deprecated Edge.driver_path= in favor of Service::Edge.driver_path=

Firefox:
  * Deprecated legacy driver in favor of GeckoDriver
  * Fixed Firefox path lookup on Cygwin (issue #6908)
  * Added support for instantiating service class directly and moved all driver
    executable configuration there (command-line arguments, port, etc.)
    Passing driver_opts, driver_path and port to driver initializer is now
    deprecated so use Selenium::WebDriver::Service.firefox instead, which allows
    to customize executable behavior in similar way. Once initialized, this
    object can be passed as :service keyword during driver initialization
  * Deprecated Firefox.driver_path= in favor of Service::Firefox.driver_path=
  * Deprecated outdated capabilities

IE:
  * Fixed an issue when native events could not be disabled using IE::Options
    initializer
  * Added support for instantiating service class directly and moved all driver
    executable configuration there (command-line arguments, port, etc.)
    Passing driver_opts, driver_path and port to driver initializer is now
    deprecated so use Selenium::WebDriver::Service.ie instead, which allows
    to customize executable behavior in similar way. Once initialized, this
    object can be passed as :service keyword during driver initialization
  * Deprecated IE.driver_path= in favor of Service::IE.driver_path=

Safari:
  * Added support for instantiating service class directly and moved all driver
    executable configuration there (command-line arguments, port, etc.)
    Passing driver_opts, driver_path and port to driver initializer is now
    deprecated so use Selenium::WebDriver::Service.safari instead, which allows
    to customize executable behavior in similar way. Once initialized, this
    object can be passed as :service keyword during driver initialization
  * Deprecated Safari.driver_path= in favor of Service::Safari.driver_path=

Remote:
  * Change default HTTP client to use persistent connections

3.141.0 (2018-10-31)
====================

Edge:
  * Added new Edge::Options class that should be used to customize browser
    behavior. The instance of options class can be passed to driver
    initialization using :options key. Please, note that using options require
    insiders builds of Edge.

Chrome:
  * Included HasLocation to Chrome driver (thanks @sidonath).
  * Updated endpoint to send Chrome Debugging Protocol commands. The old one
    has been deprecated in ChromeDriver 40.

Safari:
  * Added new Safari::Options class that should be used to customize browser
    behavior. The instance of options class can be passed to driver
    initialization using :options key. Please, note that using options require
    Safari 12+.

Remote:
  * Allow passing Options instances to remote driver initialization using
    :options key. This feature allows to use browser-specific options classes
    (Chrome::Options, Firefox::Options, etc.) and pass them to Server/Grid
    instead of capabilities.

3.14.1 (2018-10-03)
===================

Ruby:
  * Added a workaround to ignore Errno::EALREADY error when starting drivers
    on Windows Subsystem for Linux
  * Changed default pause duration to 0 for Selenium::WebDriver::Driver#action#pause (thanks @twalpole)
  * Deprecated Selenium::WebDriver::PortProber#random
    in favor of Selenium::WebDriver::PortProber#above
  * Fixed a bug when Selenium::WebDriver::Element#drag_and_drop would not
    work in certain cases
  * Updated RubyZip dependency to 1.2.2 which fixes security vulnerability

Edge:
  * Added support for --silent driver flag
  * Fixed an incorrect dash symbol when passing arguments to MicrosoftWebDriver.exe

Firefox:
  * Fixed an incorrect dash symbol when passing arguments to GeckoDriver

Safari:
  * Fixed a bug when Selenium::WebDriver::Element#displayed? would raise error
    in Safari 12

3.14.0 (2018-08-03)
===================

Ruby:
  * Allow to customize default duration of movement of pointer actions using
    Driver#action#default_move_duration= (thanks @prakharrr)
  * Fixed an accidentally removed Selenium::WebDriver::Error::TimeoutError (thanks @twalpole)

Server:
  * Fixed an issue when Server.latest couldn't parse the version

Remote:
  * Added support for uploading multiple files by passing them as a string
    separated by \n to Element#send_keys. Please, note that not all the drivers
    have multiple file upload implemented (tested to work in ChromeDriver).

3.13.1 (2018-07-20)
===================

Chrome:
  * Fixed an issue when empty Chrome options would cause DevToolsActivePort issue (thanks @artplan1)

Remote:
  * Support detecting local files (thanks @mskvn)

3.13.0 (2018-06-25)
===================

Ruby:
  * Address warnings for redefined methods and uninitialized instance variables

Chrome:
  * Chrome options capabilities updated to use goog:chromeOptions.
    Note that Selenium now requires ChromeDriver v2.31 at minimum.
  * Added ability to tell headless Chrome to save files using Driver#download_path= (thanks @pelly)

3.12.0 (2018-05-08)
===================

Ruby:
  * Added User-Agent header to requests from Selenium to give remote
    ends more visibility into distribution of clients (thanks @sah)
  * Added Selenium::WebDriver::VERSION constant (thanks @sah)
  * Added changelog link to RubyGems page
  * Fixed a bug when requests were sent with empty Content-Type,
    which should instead be application/json (issue #5615 and #5659)
  * Fixed a bug when failed connection attempt was retried without
    grace period for remote to resolve its problem (thanks @amckinley42)
  * Fixed a bug with accidentally removed HasNetworkConnection driver extension

Chrome:
  * Fixed a bug when deprecation message for using Chrome extensions
    was incorrectly shown (thanks @treby)

Safari:
  * Added support getting permissions via Driver#permissions
  * Added support setting permissions via Driver#permissions=
  * Added support enabling web inspector via Driver#attach_debugger

3.11.0 (2018-03-11)
===================

Ruby:
  * No changes in Ruby bindings for this release

3.10.0 (2018-03-02)
===================

Ruby:
  * Added Errno::EAFNOSUPPORT to the list of ignored errors when finding port (thanks @jtarchie)
  * Added automatic conversion of noProxy to the list of strings as required
    by W3C WebDriver Specification (issue #5004)

Chrome:
  * Added Chrome::Options#headless! shortcut to enable headless mode (thanks @pulkitsharma07)

IE:
  * Added support for getting local storage using Driver#local_storage
  * Added support for getting session storage using Driver#session_storage

3.9.0 (2018-02-06)
==================

Ruby:
  * Fixed a bug when omitted capabilities caused NoMethodError (issue #5185)
  * Fixed a bug when getting page source in W3C dialect caused WebDriverError (thanks @KazuCocoa)
  * Fixed a bug when getting backtrace of server error would case NoMethodError (thanks @mcking49)
  * Updated YARD to ~> 0.9.11
  * Updated rubyzip to ~> 1.2 (thanks @michaelglass)

Chrome:
  * Added support for getting network conditions via Driver#network_conditions
  * Added support for setting network conditions via Driver#network_conditions=
  * Added support to allow driver respond with custom error codes (issue #5376)

Firefox:
  * Improved GeckoDriver binary lookup mechanism (issue #5240)

3.8.0 (2017-12-01)
==================

Ruby:
  * Removed deprecated Alert#authenticate
  * Removed deprecated :port initialization argument of Remote::Bridge.
    Use :url instead.
  * Removed deprecated Selenium::WebDriver::Remote::W3CCapabilities.
    Use Selenium::WebDriver::Remote::Capabilities instead.

IE:
  * Remove deprecated :log_file driver initialization argument.
    Use driver_opts: {log_file: ''} instead.
  * Remove deprecated :log_level driver initialization argument.
    Use driver_opts: {log_level: ''} instead.
  * Remove deprecated :implementation driver initialization argument.
    Use driver_opts: {implementation: ''} instead.
  * Removed deprecated :service_args driver initialization argument.
    Use driver_opts: {args: ['--some-switch']} instead.

Chrome:
  * Removed deprecated :service_log_path driver initialization argument.
    Use driver_opts: {log_path: 'path'} instead.
  * Removed deprecated :service_args driver initialization argument.
    Use driver_opts: {args: ['--some-switch']} instead.

Firefox:
  * Removed deprecated :service_args driver initialization argument.
    Use driver_opts: {args: ['--some-switch']} instead.

Safari:
  * Removed deprecated :service_args driver initialization argument.
    Use driver_opts: {args: ['--some-switch']} instead.

Edge:
  * Removed deprecated :service_args driver initialization argument.
    Use driver_opts: {args: ['--some-switch']} instead.

3.7.0 (2017-11-03)
==================

Ruby:
  * Added //rb:lint task to check codebase using RuboCop (thanks @RustyNail)
  * Fixed codebase to comply more to Ruby community style guide (thanks @RustyNail)
  * Packaged all dependencies to Selenium repository so that non-Ruby committers
    can build and test Ruby bindings easier
  * Update errors list according to latest changes of specification (thanks @jaysonesmith)

Firefox:
  * Added Firefox::Options#headless! shortcut to enable headless mode (thanks @franzliedke)

3.6.0 (2017-09-25)
==================

Edge:
  * Fixed a bug when execute_script failed using server + Edge (issue #4651)

Firefox:
  * Fixed a bug when web extension failed to install using profile class (issue #4093)

PhantomJS:
  * Support is deprecated in favor of headless Chrome/Firefox or HTMLUnit.
    PhantomJS is no longer actively developed, and support will eventually
    be dropped.

3.5.2 (2017-09-07)
==================

Ruby:
  * Removed platformVersion from W3C payload (issue #4641)
  * Fixed a bug when proxy type was not compliant to specification (issue #4574)
  * Added support for passing speed to flick action (issue #4549)
  * Using TouchActionBuilder no longer prints mouse/key deprecations
  * Deprecated Alert#authenticate
  * Added support for DEBUG environment variable which enables full debug mode in gem

Firefox:
  * Fixed a bug when page load timeout was not properly constructed in new session payload
  * Fixed a bug when GeckoDriver error stacktrace was not displayed (issue #3683)

Chrome:
  * Added workaround for the case when findElements call returns null (issue #4555)
  * Chrome::Driver now includes touch actions by default

3.5.1 (2017-08-15)
==================

Ruby:
  * Fixed a bug when Chrome/Firefox (and probably other) drivers could not be
    started on JRuby (issue #4453).

3.5.0 (2017-08-10)
==================

Firefox:
  * Firefox subprocess output is now only redirected when debug is set (issue #4311)
  * Fixed a bug where non-integers could be sent when setting window rect
  * Fixed Firefox location detection on Windows_x64 (thanks kamenlitchev)
  * Fixed passing of profile with a W3C compatible remote end

IE:
  * Added new IE::Options class that should be used to customize browser
    behavior (native events, element scroll behavior, etc).
    The instance of options class can be passed to driver initialization using
    :options key. Old way of passing these customization directly to driver
    initialization is deprecated.

3.4.4 (2017-07-13)
==================

Firefox:
  * Added support for GeckoDriver install addon command (issue 4215).
  * Added support for GeckoDriver uninstall addon command (issue 4215).
  * Raise error when passing :firefox_options as capability.

Ruby:
  * Fixed a bug when childprocess were leaking /dev/null file descriptor (issue 4285).
  * Make Remote::Driver class so that it can be inherited from.

3.4.3 (2017-06-16)
==================

Ruby:
  * Fixed a regression when passing symbol as :desired_capabilities caused NoMethodError (issue 4187).

3.4.2 (2017-06-14)
==================

Ruby:
  * Added unhandledPromptBehavior to the list of known capabilities.
  * Added timeouts to the list of known capabilities.
  * Fixed a regression when passing hash as :desired_capabilities caused NoMethodError (issue 4172, thanks Thomas Walpole).
  * Fixed a regression when extension capabilities (the ones that have ":" inside)
    were filtered out when doing protocol handshake.
  * Improved handling of capability names passed as plain camelCased strings
    vs Rubyish snake_cased symbols when doing protocol handshake.

Chrome:
  * Fixed a regression when passing :switches to driver initialization was ignored.

3.4.1 (2017-06-13)
==================

Ruby:
  * Implemented a new dual-dialect mechanism for communication with drivers
    (a.k.a. protocol handshake). There shouldn't be any noticeable differences
    but since this is a significant refactoring of internal APIs, some bugs
    could slip into the release.
  * Renamed ElementClickIntercepted to ElementClickInterceptedError.
  * Renamed ElementNotInteractable to ElementNotInteractableError.
  * Deprecated W3CCapabilities in favor of Capabilities (it was meant to be private API).
  * Added a warning when trying to save screenshot without .png extension (thanks @abotalov).

IE:
  * Added support for both old IEDriver which uses OSS dialect of JSON wire
    protocol (<= 3.4.0) and new IEDriver which uses W3C dialect (not yet released).

Safari:
  * Removed runtime dependencies used for old SafariDriver (u.g. websocket).

Chrome:
  * Added new Chrome::Options class that should be used to customize browser
    behavior (command line arguments, extensions, preferences, mobile emulation, etc.).
    The instance of options class can be passed to driver initialization using
    :options key. Old way of passing these customization directly to driver
    initialization is deprecated.

Firefox:
  * Added new Firefox::Options class that should be used to customize browser
    behavior (command line arguments, profile, preferences, Firefox binary, etc.).
    The instance of options class can be passed to driver initialization using
    :options key. Old way of passing these customization directly to driver
    initialization is deprecated.

3.4.0 (2017-04-21)
===================

Edge:
  * Fix bug when response is not wrapped with "value"

Firefox:
  * Support geckodriver v0.16

Ruby:
  * Support ElementClickIntercepted error from W3C spec
  * Support ElementNotInteractable error from W3C spec
  * Implement window rect commands
  * Implement window minimize command

3.3.0 (2017-03-07)
===================

Firefox:
  * geckodriver v0.15 or later is required

W3C:
  * Support for command response data to be wrapped in a 'value' key
  * Support for updated timeout formats

3.2.2 (2017-03-01)
===================

Ruby:
  * Fix bug for supporting Logger output on Ruby versions < 2.3
  * Add more logging and adjust output levels

Remote:
  * Support for creating Remote session with browser name and url parameters

3.2.1 (2017-02-24)
===================

Ruby:
  * Fix bug for supporting Logger on Ruby versions < 2.3

3.2.0 (2017-02-22)
===================

Ruby:
  * Implement new Logger class
  * Fix issue with chromedriver process leader incompatibility on Win7 (issue 3512)

3.1.0 (2017-02-14)
===================

Firefox:
  * implement W3C actions endpoint

3.0.8 (2017-02-08)
===================

Firefox:
  * Fix signature of element returned from #active_element

3.0.7 (2017-02-06)
===================

Firefox:
  * Fix signature of element arrays returned from #find_elements (issue 3471)

3.0.6 (2017-02-05)
===================

Firefox:
  * Implement W3C window position
  * Update implementation for W3C send text to alert
  * Implement timeout settings
  * Remove default capabilities (thanks lmtierney)
  * Fix signature of elements returned from #execute_script (thanks Thomas Walpole)

3.0.5 (2016-12-27)
===================

Ruby:
  * Support for Ruby 2.4.0 (Thanks jamespdo)

3.0.4 (2016-12-21)
===================

Firefox:
  * Implement profile support via geckodriver (#2933 thanks lmtierney)

Ruby:
  * Fix bug preventing use of Curb client (#2951 thanks clarkenciel)
  * Support Net::HTTP::Persistent version 3 (#3219 thanks Pete Johns)
  * Allow Net::HTTP::Default to set open_timout and read_timeout independently (#3264 thanks richseviora)
  * Change default for Net::HTTP::Default#open_timeout to facilitate debuggers  (#3264 thanks richseviora)

3.0.3 (2016-11-26)
===================

Ruby:
  * Allow drivers to be executed from batch files on Windows

3.0.2 (2016-11-25)
===================

Ruby:
  * Implement #driver_path as parameter when initializing a driver (thanks lmtierney)
  * Improve Ruby syntax in driver commands (thanks joe_schulte)
  * Improve performance when shutting down drivers (thanks lmtierney)
  * Fix bug for finding open ports on Windows (thanks kou1okada)
  * Fix bug in auto detection of drivers which allowed selection of non-executable binaries

W3C:
  * Implement #cookie_named and #delete_all_cookies methods (thanks lmtierney)
  * Implement element #property method (thanks lmtierney)

Chrome:
  * Fix bug in switches (thanks danvine)

3.0.1 (2016-11-06)
===================

Ruby:
  * Always send JSON Wire Protocol commands to server instead of W3C commands

3.0.0 (2016-10-13)
===================

Firefox:
  * Update :firefox_options support for geckodriver 0.11

3.0.0.beta4 (2016-09-29)
===================

Ruby:
  * Remove support for deprecated driver options
  * Add support for latest driver options
  * Add support for :port parameter for launching driver
  * Add support for :service_args parameter for driver command line switches
  * Improve reliability by increasing service shutdown timeout (#2815; thanks John Barbuto )

Firefox:
  * Add support for :firefox_options in geckodriver

Safari:
  * Remove support for legacy Safari driver (use Apple's driver built in to Safari 10+)

Chrome:
  * Set chromedriver to not log by default

3.0.0.beta3.1 (2016-09-03)
===================

Firefox:
  * Fixed bug - legacy firefox extension included in gem

3.0.0.beta3 (2016-09-01)
===================

Firefox:
  * Implemented w3c getAttribute with javascript atom

3.0.0.beta2.1 (2016-08-03)
===================

Ruby:
  * Fixed bug in collections

3.0.0.beta2 (2016-08-02)
===================

Firefox:
  * Fixed bug with form submission
  * Improved w3c element handling

3.0.0.beta1 (2016-07-28)
===================

Ruby:
  * Remove support for RC client
  * Remove support for Ruby < 2.0
  * Update code to support designated style guidelines
  * Chrome/GeckoDriver/PhantomJS/IE/Edge drivers are refactored to use standard
    service class (issue 1797)
  * Option `:timeout` was removed from IE server (issue 1797)

Chrome:
  * Remove override of default chromedriver behavior for chrome.detach (issue 2418)

Firefox:
  * Rename wires to geckodriver
  * Change default usage from FirefoxDriver to geckodriver

Safari:
  * Initial support for Apple's Safari Driver in Sierra (issue #2475)

Android and iPhone:
  * Remove support for deprecated classes (Issue #2476)

2.53.0 (2016-03-15)
===================

Ruby:
  * Removed dependency on "multi_json" (issue 1632)
  * Properly handle namespaces in install manifest of Firefox add-ons (issue 1143)
  * Improve error handling when stopping browsers (thanks bsedat)
  * Fix deselecting options in select lists (thanks glib-briia)
  * Fix w3c error handling
  * Update w3c Capabilities support

IE:
  * support for alert credentials (issue #1698, thanks Alan Baird & trabulmonkee)

2.52.0 (2016-02-12)
===================

No Ruby changes in this release.

2.51.0 (2016-02-05)
===================

No Ruby changes in this release.

2.50.0 (2016-01-27)
===================

Firefox:
 * Fix bug for locating binary in local path  (issue 1523, thanks Gopal Patel)

2.49.0 (2016-01-13)
===================

Ruby:
  * support for SessionNotCreatedError (thanks Alexander Bayandin)

Safari:
  * Limit support to OS X (issue 1186)
  * support for multiple concurrent drivers

PhantomJS:
  * Implement Socket locking

IE:
  * support for multiple concurrent drivers

Chrome:
  * prevent 404 error when shutting down Chrome service (thanks Fumiaki MATSUSHIMA)
  * logging turned on by default
  * support local storage capabilities

Firefox:
  * support setting the location of Firefox binary to use when run locally
  * add default lookup of Homebrew Cask default directory (issue 1437)

W3C Specification:
  * support for using with Remote WebDriver
  * implement window size command
  * implement window position command
  * implement element size command
  * implement element position command
  * implement full screen window command
  * implement page source command

2.48.1 (2015-10-13)
===================

Firefox:
  * Mozilla's Wires Driver for Marionette works with Remote WebDriver

2.48.0 (2015-10-07)
===================

Firefox:
  * Initial implementation of Mozilla's Wires Driver for Marionette; Supported in version 43 and higher

Edge:
  * Fix execution with Remote Server
  * Fix Javascript Execution
  * Implement Alert Handling
  * Implement Window Switching

Ruby:
  * Initial implementation of W3C WebDriver syntax to support Mozilla Wires
  * Change to RSpec expect syntax
  * Specs can be run from relative directories


2.47.1 (2015-07-31)
===================

Edge:
  * Initial implementation of Microsoft's EdgeDriver


2.47.0 (2015-07-29)
===================

Safari:
  * Remove support for installing additional extensions due to architectural changes introduced with Safari 7

2.46.2 (2015-06-05)
===================
* Fix encoding issue which prevents Element#send_keys to work on Ruby < 2.0 (#621)

2.46.1 (2015-06-04)
===================
  * Fix aborted rubygems.org release

2.46.0 (2015-06-04)
===================

Firefox:
  * Support for Firefox 38
  * Fix performance bug by not forcing garbage collection in httpd.js

Chrome:
  * Fixed ChromeDriver port race condition (#449 - thanks Jason Anderson)

Ruby changes:
  * Retry binding to ports unavailable by EADDRNOTAVAIL (#394).
  * Remove Presto-Opera support (Blink-based Opera still supported)

2.45.0 (2015-02-28)
===================

Firefox:
  * Native events in Firefox relied on an API that Mozilla no longer
    provides. As such, fall back to synthesized events on recent Firefox
    versions.

Ruby changes:
  * Allow switching windows when current window is closed (thanks Titus Fortner).
  * Add :javascript_enabled to Android capabilities.

2.44.0 (2014-10-05)
===================

No Ruby changes in this release.

Firefox:
  * Native event support for Firefox 24, 31, 32 and 33

2.43.0 (2014-09-09)
===================

* Make sure UnhandledAlertErrors includes the alert text if provided by the driver.
* Firefox
  - Make sure the browser process is properly killed if silent startup hangs (#7392)
  - native events support for Firefox 24, 31 and 32
* Loosen websocket dependency to ~> 1.0
* Add support for `switch_to.parent_frame` (thanks abotalov)
* Fix download location for Selenium::Server.{latest,get} (#7049 - thanks marekj)

2.42.0 (2014-05-23)
===================

Firefox:
  * Fix for extensions whose install.rdf uses an attribute for em:id (#5978)
  * Support for Firefox 29 Native Events

2.41.0 (2014-03-28)
===================

* Removed dead browser visibility methods.
* Firefox:
  * Native events support for Firefox 28 (removed support for 26)

2.40.0 (2014-02-19)
===================

* Fix bug where FileReaper would not reap files added in a child process
* Document AbstractEventListener (#5994)
* Safari:
  * Add Safari::Options + clean up Safari extension handling (#6382)
  * Add support for user extensions (#6815)
* Firefox:
  * Support native events for Firefox 27 + removed native event support for Firefox 25

2.39.0 (2013-12-17)
===================

* Firefox: Native events support for Firefox 26.
* Add deprecation warning to the Android driver.
* Make sure selenium/client doesn't require Rake (#6709)

2.38.0 (2013-12-05)
===================

* Enforce required Ruby version in gemspec, not just transitively through rubyzip.
* Expose the logging API (beta API, subject to change) in the Ruby client: driver.manage.logs #=> Selenium::WebDriver::Logs
* Update to support native events for Firefox 25


2.37.0 (2013-10-18)
===================

* As of this version, selenium-webdriver no longer supports Ruby < 1.9.2
* Depend on rubyzip ~> 1.0.0
* Added SOCKS proxy support
* Fixed support for SVG documents in the atoms.
* Fixed computing an element's container dimensions to account for  the scrollbar size when scrolling
* Added Capabilities.htmlunitwithjs

Chrome:
  * Pass through the prefs option as a Chrome capability (#5929).
Firefox:
  * Updated Firefox native event components to support Firefox 24.
  * New elementScrollBehavior capability.
  * Fixed getLocation to work on scrolled pages.
  * Fixed autoscrolling for elements located in frames.
  * Fixed drag-n-drop for elements in frames with native events
IE:
  * Use native events by default, also for remote IE (#4695)
Safari:
  * Enable screenshots and input devices in the client.

2.35.1 (2013-08-26)
===================

* Depend on rubyzip < 1.0.0

2.35.0 (2013-08-14)
===================

Firefox:
  * Updated Firefox native event components to support Firefox 23.

2.34.0 (2013-08-06)
===================

Remote:
  * Add `Driver#remote_status` (remote driver only) (#5669)
Firefox:
  * Updated Firefox native event components to support Firefox 22.
iPhone:
  * The driver is now deprecated (see http://appium.io/ or http://ios-driver.github.io/ios-driver/ for a replacement)
Various:
  * Updated our copy of the Closure compiler and library to the most
    recent versions.
  * Updated the atoms library, including support for MS pointer events
    and refinements to element visibility tests.
  * Update synthesized mouse implementation. Mouse moves are
    implemented using nsIDOMWindowUtils.
  * Added support for the HTML5 "hidden" attribute. If an element, or
    ancestor, has hidden attribute make, it is not shown.

2.33.0 (2013-05-26)
===================

Remote:
  * Support rotating devices, such as iPhone & iPad in simulator and Android browser in emulator
  * Support for interacting with touch screen devices, such as iPhone & iPad in simulator and Android browser in emulator
  * Improve error messages for invalid wire protocol responses
Chrome:
  * Accept :service_log_path for Chrome. (#3475)
IE:
  * IE >=9 versions triggerMouseEvent like other browsers (#2218).
Various:
  * Element#text ignores elements in <head>


2.32.1 (2013-04-11)
===================

Safari:
  * Fix typo when encoding the Safari server redirect URL (#5472)

2.32.0 (2013-04-09)
===================

Safari:
  * The Safari extension is now packaged with the gem and automatically installed (#5322)
  * Improved detection of the binary location on 64-bit windows (#5273)
Opera:
  * Allow passing :desired_capabailities (#5279)
Firefox:
  * This release supports versions 10esr, 17esr, 19, 20.
  * Improved SVG support
Other:
  * Allow #click_and_hold without target (#5410).
  * Remove assumptions about returned capabilities (for ios-driver)

2.31.0 (2013-03-02)
===================

Remote:
  * Expose session_id on the remote driver when used directly (#5240).
Firefox:
  * Native events in Firefox 19
Opera:
  * Treat UNSPECIFIED proxy type as a nil proxy (#5081).
Other:
  * Add ability to pass :desired_capabilities to all the Ruby drivers, not just for :remote.
    Direct arguments take presendence. (#5078, see also https://github.com/SeleniumHQ/selenium/pull/8, https://github.com/SeleniumHQ/selenium/pull/11)

2.30.0 (2013-02-20)
===================

Firefox:
  * Firefox 19 support (for synthesized events)
Remote:
  * Pass along firefox_binary correctly (#5152)
Safari:
  * Don't overwrite Driver#browser
Other
  * Alert#text should raise on closed alert.

2.29.0 (2013-01-21)
===================

Firefox:
  * Firefox 18 support (for native events).
IE:
  * New 'requireWindowFocus' desired capability.
  * IE view port calculation take scroll bars into account (#3602)
Safari:
  * Replace 'libwebsocket' with 'websocket' gem. This should ensure
    support with recent Safari.
Other:
  * Fix Cygwin issue in PortProber/Firefox::Binary (#4963)

2.27.2 (2012-12-11)
===================

Firefox:
  * Fix for native events in v17 (packaging mistake)

2.27.1 (2012-12-07)
===================

Firefox:
  * Fix "g[b] is not an object" error when passing null to execute_script.

2.27.0 (2012-12-06)
===================

Firefox:
  * Support for Firefox 17.
IE:
  * Path to the server executable can be specified (S::W::IE.path=)
Other:
  * Added :phantomjs driver

2.26.0 (2012-11-02)
===================

Firefox:
  * Added support for native events for Firefox 15 and 16.
  * Modified FirefoxDriver to use atoms to switch between frames.
  * FIXED: 4309: 'Could not convert Native argument arg 0' error with Firefox.
  * FIXED: 4375: Executing javascript hangs Firefox.
  * FIXED: 4165: WebDriver fails on a machine with no IP address.
Safari:
  * Fixed SafariDriver to allow calling .quit() consecutively without error.
  * FIXED: 4676: Unable to fire javascript events into SVG's.
  * FIXED: 3969: SafariDriver should auto-dismiss alerts.
IE:
  * FIXED: 4535: Hover still does not work perfectly in IE.
  * FIXED: 4593: Alert.accept() Cancels the Resend Alert/Dialog Box.

2.25.0 (2012-07-19)
===================

* Respect no_proxy / NO_PROXY env vars (#4007).
* Improve error message if a configured proxy refuses the connection.
* Ignored exception can be configured on the Wait class.
* Add Selenium::WebDriver::Support::Color class.
* Ignore Errno::ENETUNREACH when trying to detect our local IP (#4165).
* Ignore Errno::EADDRNOTAVAIL in PortProber (#3987).
* Firefox:
  * Enumerate through client rects until finding one with non-zero dimensions when clicking.
  * Updated supported versions of Firefox to 17.
  * Allow windows to be resized from a frame (#3897).
  * Fix an issue where a call to submit could hang the driver.
* IE:
  * Ability to configure logging through the :log_file and :log_level options.
  * Increasing stability of file upload dialog handling (#3858)
* Better handling of overflow edge cases when determining element visibility.

2.24.0 (2012-06-19)
===================

* bot.dom.getVisibleText does not properly handle display:run-in or display:table (#1584).
* CSS selectors now support compound selectors.
* IE:
  * Failure to click on an element in the IE Driver will yield a more meaningful error.
  * Crash on IE8 when S_FALSE is returned from get_Document (#4064)
  * DLLs are no longer bundled with the gem, users must use the standalone server from now on.
* Firefox:
  * Support for Firefox 13
  * Ability to pass :proxy directly as Firefox option (no Profile needed).

2.22.2 (2012-06-05)
===================

* Improve method for determining the local IP (#3987).

2.22.1 (2012-06-01)
===================

* Fix for 1.8.7 behaviour of Socket.getaddrinfo.
* Automatically reap Firefox profile on exit, not just in #quit.

2.22.0 (2012-05-29)
===================

* Fix conflict with ActiveSupport's Object#load (#3819)
* IE:
  * Default to standalone server executable, fall back to bundled DLLs.
  * The 'nativeEvents' capability is exposed as :native_events in the Ruby client (mode still experimental).
* Firefox:
  * Native events for Firefox 12.
  * Native events retained for Firefox 3.x, 10 and 11.
  * Fix for typing in Firefox 12
  * Fix for typing on XHTML pages (#3647)
  * Fix for maximizing windows when switched to a frame (#3758)
  * Handle alerts from nested iframes (#3825)
* Remote:
  * Honor HTTP_PROXY env vars (#3838).
* Element#attribute returns nil if a boolean attribute is not present.
* NoSuchWindowError will be thrown if the currently selected window is closed and another command is sent.
* Safari:
  * support for frame switching, snapshot taking, execute script
  * message protocol changed, not backwards compatible with 2.21.
* Style attributes are no longer lower-cased by default (#1089).
* Make sure the Ruby client kills Firefox even when the RPC fails.
* Make sure the Ruby client checks all network interfaces when finding free ports.


2.21.2 (2012-04-18)
===================

* Check MultiJson.respond_to?, depend on ~> 1.0

2.21.1 (2012-04-16)
===================

* Set multi_json dependency to < 1.3 to avoid deprecation warnings.

2.21.0 (2012-04-11)
===================

* Add Selenium::WebDriver::Window#maximize (#3489)
* Safari:
  * New driver! See https://github.com/SeleniumHQ/selenium/wiki/SafariDriver.
* Firefox:
  * Significant stability improvements.
  * Native events support for Firefox 11
  * Dropped native events support for Firefox 4-9
  * Window maximize implementation.
* IE:
  * Ignore invisible dialogs (#3360).
  * Window maximize implementation.
* Android:
  * Accept SSL certificates (#3504).

2.20.0 (2012-02-28)
===================

* Loosen the multi_json and ffi dependencies (#3446)
* Firefox:
  * Introduce a timeout for page loads. This needs to be used in
    conjunction with the unstable page load detection. Exposed as
    Timeouts#page_load=
* Scroll containing elements, not just windows (#3391).
* Element#{style => css_value}, with an alias for backwards compatibility.
* Atoms:
  * Submit a form when the enter button is pressed in its input
    element.
  * Add a "mouse pixel scroll" event to the atoms events module.
  * Adding a public "mouseOver" action and a little internal
    refactoring around the mouseOver functionality.
* Selenium::WebDriver::Wait: polling interval reduced from 0.5 to 0.2 seconds.

2.19.0 (2012-02-08)
===================

* RC client supports server-side WebDriver-backed Selenium.
* Touch APIs implemented in the Ruby client (Android only)
* Firefox:
  * Fix deserialization of user.js in Firefox::Profile
  * Native events implemented for Firefox 10.
  * Renamed the experimental "fast" page loaded strategy "unstable"
    and disable queuing of commands when it's enabled.
  * Disabled native events for Firefox 8 as it's deprecated by Mozilla.
  * Fix for exceptions thrown when an alert occurs during script execution.
* Chrome:
  * New download link for the server component:
    http://code.google.com/p/chromedriver/downloads/list

2.18.0 (2012-01-27)
===================

* Fix for getting value attribute of option elements. (#3169)
* Firefox and IE:
  * Raise UnhandledAlertError if an alert is present during an operation. The unhandled alert is also dismissed to mitigate repeat exceptions.
* Firefox:
  * Better handling of getText invocations on SVG elements.
  * Fix for Element#click in Firefox 4. (#3253)
  * Fixed bug when deserializing user.js in Firefox::Profile.
  * Default profile preferences now read from shared JSON blob.
* Android and iPhone:
  * Client support for the geolocation API (see Selenium::WebDriver::DriverExtensions::HasLocation)
  * Client support for the web storage API (see Selenium::WebDriver::DriverExtensions::HasWebStorage)
* iPhone:
  * Server now supports frame switching (for frames in the same domain).

2.17.0 (2012-01-16)
===================

* Firefox:
  * Fix excessive unwrapping when switching windows.
  * Set toolkit.telemetry.{enabled,rejected} in the default Firefox profile.
  * Support up to version 12 with synthesized events.
  * Fixed issues launching Firefox 9 due to modal dialog (#3154, #3144)
* Chrome:
  * Now accepts a :url option, pointing to an already running Chrome server.
  * Now accepts a :proxy option (i.e. Selenium::WebDriver::Proxy instance).
* iPhone:
  * iWebDriver will auto-play HTML5 video (#3152)
* Element#attribute("value") falls back to the text of option tags, if no value attribute is specified (#3169)

2.16.0 (2012-01-04)
===================

* Firefox:
  * Native events support for Firefox 9
  * Allow apps to use offline storage by default
  * Fix excessive unwrapping when executing mouseMove
  * Click in the middle, rather than the top-left of elements (#3034, #2700)
* IE:
  * Raise StaleElementReferenceError when interacting with elements outside the currently focused frame
  * Handle frames and iframes in showModalDialog windows
* Chrome:
  * Improve client handling of invalid error responses
* iPhone:
  * Updated to latest CocoaHTTPServer
* Remote:
  * Improve performance of Element#== by only making an RPC when necessary.
  * Disallow caching of GET requests
* Various:
  * Raise ArgumentError instead of UnsupportedOperationError on invalid modifier key
  * Improve docs for Server, ActionBuilder and Window
  * Update to latest Sizzle (used for :css selectors in older browsers)

2.15.0 (2011-12-08)
===================

* Firefox:
  * Now supports up to Firefox 11 (for synthesized events)
  * Implicit waits now change how long we wait for alerts. This
    functionality will change in 2.16
  * Fix scrolling issue (#2700)
* IE:
  * Fix issue with getWindowHandles() and showModalDialog() (#1828)
  * Add support for the window sizing and positioning API
* Make Platform.bitsize use the correct constant from FFI
* WebDriver internals:
  * Atoms code contribution from Google
  * Closure updated


2.14.0 (2011-11-29)
===================

* Add Selenium::WebDriver::Support::Select class to ease working with select lists.
* Add Capabilities.ipad and Capabilities.iphone (#2895)
* Replace json_pure dependency with multi_json. (#2901)
* Don't leave sockets hanging in SYN_SENT state while polling.
* Allow selecting option elements even if the enclosing select has zero opacity.
* Exception renames (old names aliased and will still work in rescues):
  * ObsoleteElementError      -> StaleElementReferenceError
  * UnhandledError            -> UnknownError
  * UnexpectedJavascriptError -> JavascriptError
  * NoAlertOpenError          -> NoAlertPresentError
  * ElementNotDisplayedError  -> ElementNotVisibleError
* Firefox:
  * Fixed issue with scrolling on small viewports with native events.
  * Fix CSS selector support in Firefox 3.0
* IE:
  * Implement the window control API

2.13.0 (2011-11-18)
===================

* Firefox:
  * Recovering from null window references in the Firefox driver (#1438)

2.12.2 (2011-11-13)
===================

* Firefox
  * Fix issue where Firefox 8 would throw permission errors after document.domain was modified (#2863).
  * Force window to the foreground on launch (see https://bugzilla.mozilla.org/show_bug.cgi?id=566671)

2.12.1 (2011-11-11)
===================

* Fix regression when typing into contenteditable elements.

2.12.0 (2011-11-10)
===================

* Loosened the ffi dependency now that Windows support is back (#2755).
* Fix shutdown issues when using net-http-persistent against remote servers.
* Added beta window control API (see Selenium::WebDriver::Options#window).
* Firefox
  * Support for Firefox 8.
  * Better reporting of page size when attempting to move out of bounds.
  * Beta implementation of window control.

2.11.0
======

(release skipped since it included only server-side changes)

2.10.0 (2011-10-27)
===================

* Improve native keyboard emulation on Windows.
* Allow commas in CSS selectors (#2301)
* Firefox:
  * Fix intermittent error when finding elements by XPath (#2099)
  * Fix detection of maximum page size (#2700)
  * Avoid extension selection dialog (extensions.autoDisableScopes)
  * Fix invalid wire responses from the synthetic mouse (#2695)
  * Don't scroll unnecessarily (#1771).
* IE:
  * Improve handling of #clear on disabled or readonly elements.

2.9.1 (2011-10-24)
==================

* Workaround for invalid error responses (#2695).

2.9.0 (2011-10-21)
==================

* Support file uploads to the remote server (see Selenium::WebDriver::DriverExtensions::UploadsFiles)
* New exception: Selenium::WebDriver::Error::MoveTargetOutOfBoundsError
* Implemented Chrome::Profile#add_extension
* Better respect for preformatted text in Element#text
* Reduced scrolling during tests for IE and Firefox.
* Firefox:
  * Support for experimental page load detection.
* IE:
  * Better detection of where to click on links (#2675).
  * Improve handling of modal dialogs (showModalDialog).

2.8.0 (2011-10-06)
==================

* Firefox
  - Avoid telemetry prompt on Firefox 7
  - Allow parallel execution with native events on Linux (#1326)
  - Added native events support for Firefox 7 on Linux/Windows
  - Improve search for libX11 for native events on Linux (#384)
  - Fix double click with native events
* Chrome
  - Fail fast if the chromedriver server is not executable.
* IE
  - Fix find_element bug (#2563)


2.7.0 (2011-09-23)
==================

* Firefox
  - no longer types in the URL bar (#2487)
  - fixed native events click() issue when element is out of view
  - double click + get no longer hangs firefox (#2456)
  - make sure escaped backslashes are properly escaped when serializing a Firefox profile (#2485)
* IE
  - fix event firing issue (#2516)
* Opera
  - don't start the remote service if the driver is passed bad arguments

2.6.0 (2011-09-13)
==================

* Rescue and retry on Errno::EADDRINUSE to work around ephemeral ports issue on Windows.
* Use correct default URL for the Android driver.
* Profile zipping now follows symlinks (#2416).
* Firefox
  - Disable malware check
  - Various #click improvements
  - Don't scroll if element is already in view
* IE:
  - improve scrolling to elements with 'overflow: scroll'
  - properly trigger jQuery change events (#2207)
  - improve handling of nested modal dialogs
* Opera:
  - capabilities exposed as options to Selenium::WebDriver.for
* Various iPhone driver fixes (e.g. #1396)

2.5.0 (2011-08-23)
==================

* IE: support for double click and fix for clicks close to edge of window.
* Fix for clicking links that overflow into multiple lines (#1020).
* Correct initial cursor position when typing into text fields with Firefox 6.
* Native events support for Firefox 6 on Windows and Linux.
* Fix bug in Android::Bridge when no :http_client option was passed.
* Set chrome.detach to tell chromedriver to leave browser running on exit.

2.4.0 (2011-08-11)
==================

* Firefox 6 support.
* Raise in switch_to.alert when no alert is present.
* Improved handling of non-breaking spaces for Element#text.

2.3.2 (2011-08-01)
==================

* Re-releasing since 2.3.1 was a buggy build.

2.3.1 (2011-08-01)
==================

* Fix bug where Firefox would hang if Firefox::Profile#log_file= was set.

2.3.0 (2011-08-01)
==================

* Add Selenium::WebDriver::Chrome::Profile
* Better detection of clickable areas in Firefox.
* Merge of Google-contributed code into the underlying Atoms.
* IE click issue fixed (#1650)
* No longer raise in Element#inspect if the element is obsolete.


2.2.0 (2011-07-26)
==================

* Add ability to listen for WebDriver events
* Fix Android/iPhone bridges to work similar to others (https://github.com/jnicklas/capybara/issues/425)
* Various atoms fixes
* Element equality now works properly with the remote server (#251).

2.1.0 (2011-07-18)
==================

* Various improvements to the IE driver (#2049, #1870)
* Atoms fixes (#1776, #1972).
* Synthetic mouse clicks do not propagate errors in onmouseover.

2.0.1 (2011-07-11)
==================

* Make sure at_exit hooks aren't inherited by child processes.

2.0.0 (2011-07-08)
==================

* Remove deprecated methods Element#{toggle,select,drag_and_drop_*,value}.
* Add ability to pass :verbose, :native_events to the Chrome driver.
* Synthetic mouse implementation for Firefox - improves drag and drop support platforms without native events.
* Added Selenium::WebDriver::Opera (requires the remote server).
* Fix for locating Firefox on 64-bit Windows when missing from the registry.
* Fix native events on Firefox 4, 5.

0.2.2 (2011-06-22)
==================

* Deprecate Element#{toggle,select,drag_and_drop_*}
* Chrome.path= now sets the path to Chrome, Chrome.driver_path= the path to the chromedriver server.
* Fix argument names in Mouse#move_to and Mouse#move_by.
* Support Firefox 5
* Chrome and Firefox drivers now includes the HasInputDevices module.
* Selenium::Rake::ServerTask now works with Rake 0.9.

0.2.1 (2011-06-01)
==================

* Allow passing custom command line switches to Chrome (requires today's release of the Chrome server)
* Avoid mutating arguments to find_element (issue #1273).
* Avoid conflicts when SUT modifies Array.prototype
* Allow setting arbitrary capabilities by adding Capabilities#[]=
* The Chrome driver is extended with TakesScreenshot.
* IE driver detects bad protected mode settings.
* Firefox driver no longer considers opacity when determining visibility.
* Fix for ActionBuilder#move_by.
* Treat Errno::EBADF as an indication that we failed to grab the socket lock (issue #1611).
* Ensure Firefox launches don't hang on some Ruby versions (by improving Selenium::WebDriver::SocketPoller).
* Various internal driver improvements.

0.2.0 (2011-04-22)
==================

* Update Ruby bindings to use the rewritten Chrome driver (see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver).
* Add deprecation warning for WebDriver::Element#value (use Element#attribute("value") instead).
* Change the default timeout for Wait instances to 5 seconds.
* Fix bug where locators would fail if Object.prototype had been modified.
* Various IE fixes
  - Issues: #698, #1444
  - Improved handling of showModalDialog()
  - Full-size screenshots
* Allow users to override the dom.max_script_run_time preference in Firefox.
* Removed DesiredCapabilities.safari, which was never supported anyway.
* Add DesiredCapabilities.opera, which will be supported in the Remote server if OperaDriver is on the classpath.
* Print warnings for deprecated constants in the RC client:
  - Selenium::SeleniumDriver => Selenium::Client::Driver
  - Selenium::CommandError   => Selenium::Client::CommandError
* Removed top-level constants:
  - SeleniumHelper (available as Selenium::Client::SeleniumHelper)
  - SeleniumCommandError (available as Selenium::Client::CommandError)

0.1.4 (2011-03-21)
==================

* Support for Firefox 4.
* Search PATH for Firefox / Chrome on OS X as well.
* Bump dependencies for ffi and childprocess (#1356).
* Find module renamed to SearchContext
* Deprecated methods Driver#hover and Options#{speed,speed=} removed.
* Improve IE driver stability, IE9 support
* Added basic ActionBuilder and HasInputDevices#action. Not applicable for all browsers.
* Added Driver#execute_async_script
* Some WebDriver exception classes have been renamed to match its Java equivalents:
    ElementNotEnabledError   -> InvalidElementStateError
    UnknownScriptResultError -> XpathLookupError
* Fix bug where Element#disabled? would alternate between true/false (r11438)

0.1.3 (2011-02-14)
==================

* Several crashing bugs fixed in the IE driver.
* Alert API available through the remote driver.
* Driver#refresh fixed in the IE driver.
* Fixed paths for IE DLLs on Cygwin.
* Screenshot support in the IE and Remote drivers.
* Fix #1152 by avoiding IPv6 loopback.
* Added Mouse and Keyboard classes, accessible as Driver#{mouse,keyboard}. Considered experimental (IE + HtmlUnit only at the moment).
* Automation atoms now used extensively in the IE driver.
* Firefox::Bridge is now easier to extend (i.e. with a custom launcher).
* Add S::W::Remote::Http::Persistent (currently only usable with the remote server).
* IE driver passes along options like the other remote drivers, enabling user-specified HTTP clients.
* :firefox_profile added to Remote::Capabilities, enabling passing a profile to remote Firefoxes.
* IE driver now supports launching multiple instances of the browser.
* Remove some Ruby warnings (uninitialized ivars, URI.escape).


0.1.2 (2010-12-22)
==================

* Changed frame switching behaviour (http://groups.google.com/group/selenium-developers/browse_thread/thread/8dc7938c35bb3968)
* IE driver rewrite landed.
* Initial support for alerts/prompts (in Firefox).
* Cygwin support.
* Driver#execute_script now properly wraps elements inside Hashes.
* Various fixes for Firefox 4.

0.1.1 (2010-11-29)
==================

* Fix for Chrome.path=
* Remote drivers always add Content-Length for POST requests (thanks joshuachisholm)
* Fix for JS execution bug in the IE driver
* Add ability to specify a proxy on the Http::Default client.
* The remote drivers' :http_client argument now take a configured instance.

0.1.0 (2010-11-11)
===================

* selenium-client code (Se1/RC client) is now included in the gem (require "selenium/client").
* Add Selenium::WebDriver::Proxy, used to configure proxies for Firefox::Profile and the remote driver.
* Tweaked Firefox profile preferences, improve logging, disabled crash reporter.
* Reap Firefox profiles on close, not just on exit.
* Add selenium/rake/server_task and selenium/server which wraps the Selenium server jar.
* Various Firefox driver improvements (GC race conditions ++).
* IE::Bridge#initialize now takes an options hash like the other bridges.
* Added basic iPhone and Android driver classes.
* Firefox driver now works on FreeBSD.


0.0.29 (2010-10-09)
===================

* Element#find_element with :xpath follows the XPath spec (i.e. results are not limited to the receiver's subtree).
* Element#attribute(attribute) now returns "false" instead of nil.
* Firefox::Profile instances can now be reused for multiple drivers.
* Redirect Firefox console logs to a file with Firefox::Profile.log_file=
* Added a simple Wait class, based on WebDriverWait in Java.
* Search PATH for Firefox executable on Windows also.
* Added Capabilities.android
* Fix saving of screenshots on Windows and Ruby 1.9 (using "wb" mode string)
* CSS selector support in the remote driver
* CSS selector support for IE (using querySelector when available, Sizzle elsewhere)
* CSS selector support for older versions of Firefox (through Sizzle)
* Cookie expiration dates are now handled correctly (#730)
* Make Driver#bridge private, since this seems to be a common cause of confusion.
* Add {Element,Remote::Capabilities}#as_json for Rails 3 (http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/)
* User can configure path to executables with {Firefox,Chrome}.path = "/some/path"
* Added "chromium" as a possible name for the Chrome binary (#769)
* Correctly set the HTTP client timeout (#768)
* switch_to.window with block now handles exceptions and non-local returns.
* switch_to.window with block returns the result of the block.
* Extracted handling of child processes to a separate gem: http://github.com/jarib/childprocess


0.0.28 (2010-08-23)
===================

* Fix behaviour of Element#==, Element#eql? and Element#hash (#hash still has issues on IE / remote).
* Include remote server backtrace in raised errors (if available).
* Chrome: Untrusted certificate support.
* IE: Fix NoMethodError when getElementAttribute returns nil.
* Driver#[] shorthand can take a locator hash, not just an id string.

0.0.27 (2010-07-22)
===================

* Fixes for Element#attribute on IE / Firefox

0.0.26 (2010-07-19)
===================

* Work around Curb issue: http://github.com/taf2/curb/issues/issue/40

0.0.25 (2010-07-19)
===================

* Prevent Firefox from launching in offline mode (issue #587).
* Add ability to set Firefox' binary path through Selenium::WebDriver::Firefox::Binary.path=
* Add ability to install Firefox XPIs through Profile#add_extension.
* Better packaging/building of Firefox/Chrome extensions, which adds rubyzip as a dependency.
* Remote client supports HTTPS (issue #613 - thanks kkaempf).
* Fix error message for TimeOutError in the IE driver (issue #602)
* Add ability to use Chrome's default profile.
* Fix for frame behaviour in Chrome (issue #273).
* Standard gem directory structure (issue #475).

0.0.24 (2010-06-17)
==================

* Fix issues with quitting Firefox/Chrome on Windows + MRI.


0.0.23 (2010-06-15)
===================

* Improved the HTTP clients:
  - hopefully fix some occasional socket errors on Windows
  - rescue error on driver.close() with curb

0.0.22 (2010-06-11)
===================

* Bugfix: Workaround for http://github.com/taf2/curb/issues/issue/33 - curb would sometimes use DELETE for GET requests.
* Minor doc fix
* Add ability to set timeout for HTTP clients

0.0.21 (2010-06-11)
===================

* User can specify :http_client for the Firefox driver.
* Refactor HTTP client code
* Add Remote::Http::Curb as an alternative to the default (net/http) client.


0.0.20 (2010-06-03)
===================

* Fix bug where Firefox would hang on quit().

0.0.19 (2010-05-31)
===================

* Add a max redirect check to the remote driver
* Add Firefox::Profile#assume_untrusted_certificate_issuer=
* Add implicit waits (Selenium::WebDriver::Timeouts)
* at_exit hook to clean temporary profiles
* Fix for Errno::ECONNABORTED errors on Windows
* Fix issue where Firefox::Profile#secure_ssl= would have no effect
* Fix issue where locating elements by :css would fail in the Chrome driver.
* IE driver now works on 64-bit rubies.
