Bug 1913543 - Apply the final upstream fix instead of our crude workaround. r=firefox...
[gecko.git] / testing / geckodriver / CHANGES.md
blobc94a70be6bddf60cec79df6618a039750303179c
1 <!-- markdownlint-disable MD024 -->
2 # Change log
4 All notable changes to this program are documented in this file.
6 ## 0.35.0 (2024-08-06, `9f0a0036bea4`)
8 ### Known problems
10 - _Startup hang with Firefox running in a container (e.g. snap, flatpak):_
12   When Firefox is packaged inside a container (like the default Firefox browser
13   shipped with Ubuntu 22.04), it may see a different filesystem to the host.
14   This can affect access to the generated profile directory, which may result
15   in a hang when starting Firefox. Workarounds are listed in the geckodriver
16   [usage documentation].
18 ### Added
20 - Support for [Permissions] that allow controlling permission prompts
21   within the browser. This enables automated tests to handle scenarios
22   involving permissions like `geolocation`, `notifications`, and more.
24 - The command line flag `--enable-crash-reporter` has been added, to allow
25   the crash reporter in Firefox to automatically submit crash reports to
26   Mozilla's crash reporting system if a tab or the browser itself crashes.
28   Note that this feature is disabled by default and should only be used when a
29   crash situation needs to be investigated. See our documentation for
30   [crash reports] in how to share these with us.
32   Implemented by [Razvan Cojocaru].
34 ### Changed
36 - The validation of the `unhandledPromptBehavior` capability has been enhanced
37   to support finer configuration options for the [User Prompt Handler] which
38   are particularly used by [WebDriver BiDi].
40 ### Fixed
42 - The [Switch To Frame] command now correctly raises an "invalid argument"
43   error when the `id` parameter is missing.
45   Implemented by [James Hendry].
47 ### Removed
49 - Removed support for session negotiation using the deprecated
50   `desiredCapabilities` and `requiredCapabilities`.
52   Implemented by [James Hendry].
54 - Removed support for the `moz:useNonSpecCompliantPointerOrigin` capability,
55   which has not been supported since Firefox 116.
57 ## 0.34.0 (2024-01-03, `c44f0d09630a`)
59 ### Known problems
61 - _Startup hang with Firefox running in a container (e.g. snap, flatpak):_
63   When Firefox is packaged inside a container (like the default Firefox browser
64   shipped with Ubuntu 22.04), it may see a different filesystem to the host.
65   This can affect access to the generated profile directory, which may result
66   in a hang when starting Firefox. Workarounds are listed in the geckodriver
67   [usage documentation].
69 ### Added
71 - Support for [Virtual Authenticators]
73   [Virtual Authenticators] serve as a WebDriver Extension designed to simulate
74   user authentication (WebAuthn) on web applications during automated testing.
75   This functionality encompasses a range of methods, including passwords,
76   biometrics, and security keys.
78   Geckodriver supports all available commands:
80   - [Add Virtual Authenticator]
81   - [Remove Virtual Authenticator]
82   - [Add Credential]
83   - [Get Credentials]
84   - [Remove Credential]
85   - [Remove All Credentials]
86   - [Set User Verified]
88 - Support for using a page range as integer for the [Print] command.
90   Implemented by [Mitesh Gulecha].
92 ### Changed
94 - The error handling has undergone refactoring, now utilizing the
95   [anyhow](https://docs.rs/anyhow) and [thiserror](https://docs.rs/thiserror)
96   crates.
98   Implemented by [James Hendry].
100 - Specifying `--port=0` as an argument allows geckodriver to dynamically find
101   and use an available free port on the system.
103 - Updated dependencies (base64, clap, rust-url)
105 ### Fixed
107 - While searching for a default Firefox installation on the system, geckodriver
108   used the `Contents/MacOS/firefox-bin` executable instead of the binary
109   specified in the app bundle's `info.plist` file. This behavior resulted in a
110   malfunction due to a regression in Firefox, particularly affecting the Firefox 121 release.
112 - The Firefox version check has been extended to enable the execution of
113   distributions with custom prefixes for the application name.
115   Implemented by [Razvan Cojocaru].
117 ### Removed
119 - Removed the `unknown path` error which is not part of the WebDriver specification.
121   Implemented by [James Hendry].
123 ## 0.33.0  (2023-04-03, `a80e5fd61076`)
125 ### Known problems
127 - _Startup hang with Firefox running in a container (e.g. snap, flatpak):_
129   When Firefox is packaged inside a container (like the default Firefox browser
130   shipped with Ubuntu 22.04), it may see a different filesystem to the host.
131   This can affect access to the generated profile directory, which may result
132   in a hang when starting Firefox. Workarounds are listed in the geckodriver
133   [usage documentation].
135 - _Potential hang with `moz:debuggerAddress` capability set to `true`:_
137   After enabling the site-isolation feature in Firefox with geckodriver 0.32.1
138   some WebDriver clients like Selenium that use the Chrome DevTools Protocol (CDP)
139   by default for logging events could trigger a hang in Firefox's experimental CDP
140   implementation. The fix for this problem will be shipped with Firefox 112.
141   Until then the following Firefox preferences should be set:
143   - `fission.bfcacheInParent: false`
144   - `fission.webContentIsolationStrategy: 0`
146 ### Added
148 - Support for [Get Computed Label] and [Get Computed Role]
150   The command [Get Computed Label] returns the accessibility label (sometimes
151   also referred to as Accessible Name), which is a short string that labels the
152   function of the control (e.g. the string "Comment" or "Sign In" on a button).
154   The command [Get Computed Role] returns the reserved token value (in ARIA,
155   button, heading, etc.) that describes the type of control or content in the
156   element.
158   Note that the minimum required Firefox version is 113.0.
160 - Support for [Find Element From Shadow Root] and [Find Elements From Shadow Root]
162   The commands allow a lookup of individual elements or collections of elements
163   within an open or closed Shadow DOM. All location strategies except `Tag name` and
164   `XPath selector` are currently supported.
166   Note that the minimum required Firefox version is 113.0.
168 ### Changed
170 - The Mozilla specific capability `moz:useNonSpecCompliantPointerOrigin` has been
171   marked as deprecated. Its removal is planned for the Firefox 116.0 release.
173 ## 0.32.2  (2023-02-08, `602aa16c20d4`)
175 ### Known problems
177 - _Startup hang with Firefox running in a container (e.g. snap, flatpak):_
179   When Firefox is packaged inside a container (like the default Firefox browser
180   shipped with Ubuntu 22.04), it may see a different filesystem to the host.
181   This can affect access to the generated profile directory, which may result
182   in a hang when starting Firefox. Workarounds are listed in the geckodriver
183   [usage documentation].
185 - _Potential hang with `moz:debuggerAddress` capability set to `true`:_
187   After enabling the site-isolation feature in Firefox with geckodriver 0.32.1
188   some WebDriver clients like Selenium that use the Chrome DevTools Protocol (CDP)
189   by default for logging events could trigger a hang in Firefox's experimental CDP
190   implementation. The fix for this problem will be shipped with Firefox 112.
191   Until then the following Firefox preferences should be set:
193   - `fission.bfcacheInParent: false`
194   - `fission.webContentIsolationStrategy: 0`
196 ### Fixed
198 - With the release of geckodriver 0.32.1 the marionette crate was inappropriately
199   bumped to a semver incompatible version and caused `cargo install geckodriver`
200   to fail for older releases.
202 ## 0.32.1  (2023-02-02, `b7f075124503`)
204 ### Known problems
206 - _Startup hang with Firefox running in a container (e.g. snap, flatpak):_
208   When Firefox is packaged inside a container (like the default Firefox browser
209   shipped with Ubuntu 22.04), it may see a different filesystem to the host.
210   This can affect access to the generated profile directory, which may result
211   in a hang when starting Firefox. Workarounds are listed in the geckodriver
212   [usage documentation].
214 - _Potential hang with `moz:debuggerAddress` capability set to `true`:_
216   After enabling the site-isolation feature in Firefox with geckodriver 0.32.1
217   some WebDriver clients like Selenium that use the Chrome DevTools Protocol (CDP)
218   by default for logging events could trigger a hang in Firefox's experimental CDP
219   implementation. The fix for this problem will be shipped with Firefox 112.
220   Until then the following Firefox preferences should be set:
222   - `fission.bfcacheInParent: false`
223   - `fission.webContentIsolationStrategy: 0`
225 ### Fixed
227 - When using the boolean capability `moz:debuggerAddress` with a value of `true`
228   the site-isolation feature in Firefox will no longer accidentally be turned off.
229   This behavior affected all users of WebDriver clients especially Selenium, which
230   set this capability by default, and caused Firefox on desktop systems to be
231   launched in an unsupported mode.
233 ## 0.32.0  (2022-10-13, `4563dd583110`)
235 ### Added
237 - Native aarch64 builds of geckodriver for Linux and Windows are now available.
239 - Support `wheel` input source for [Actions], which is associated with a
240   wheel-type input device. This endpoint is supported by geckodriver when
241   using Firefox version ≥106.
243 - Support `touch` as `pointerType` for `pointer` input source for [Actions],
244   which is associated with a touch input device. This also includes the
245   addition of all the remaining properties for `pointer` input sources as
246   specified by WebDriver. This endpoint is supported by geckodriver when using
247   Firefox version ≥104.
249 ### Fixed
251 - Using geckodriver to launch Firefox inside a sandbox -- for example
252   a Firefox distribution using Snap or Flatpak -- can fail with a
253   "Profile not found" error if the sandbox restricts Firefox's ability
254   to access the system temporary directory. geckodriver uses the
255   temporary directory to store Firefox profiles created during the run.
257   This issue can now be worked around by using the `--profile-root`
258   command line option or setting the `TMPDIR` environment variable to
259   a location that both Firefox and geckodriver have read/write access
260   to e.g.:
262   ```bash
263   % mkdir $HOME/tmp
264   % geckodriver --profile-root=~/tmp
265   ```
267   or
269   ```bash
270   % TMPDIR=$HOME/tmp geckodriver
271   ```
273   Alternatively, geckodriver may be used with a Firefox install that
274   is not packaged inside a sandbox e.g. from [mozilla.org].
276 - The sandboxed Firefox binary is now automatically detected when geckodriver
277   is used from within a Snap confinement.
279   Implemented by [Olivier Tilloy].
281 - On MacOS the geckodriver binary is now technically both signed and notarized.
283   Note: The actual validation can only be performed if the machine that starts
284   the geckodriver binary for the very first time is online. You can find more
285   details on how to work around this issue in the [macOS notarization] section
286   of the documentation.
288 - The backup of the original Firefox preferences are now correctly restored
289   on Android when the WebDriver session ends.
291 ### Changed
293 - Update dependencies
295 ## 0.31.0  (2022-04-11, `b617178ef491`)
297 ### Known problems
299 - _Firefox running in Linux Sandbox (e.g. Snap package):_
301   Using geckodriver to launch Firefox inside a sandbox -- for example
302   a Firefox distribution using Snap or Flatpak -- can fail with a
303   "Profile not found" error if the sandbox restricts Firefox's ability
304   to access the system temporary directory. geckodriver uses the
305   temporary directory to store Firefox profiles created during the run.
307   As workaround geckodriver may be used with a Firefox install that
308   is not packaged inside a sandbox e.g. from [mozilla.org].
310 - _macOS 10.15 (Catalina) and later:_
312   Due to the requirement from Apple that all programs must be
313   notarized, geckodriver will not work on Catalina if you manually
314   download it through another notarized program, such as Firefox.
316   Whilst we are working on a repackaging fix for this problem, you can
317   find more details on how to work around this issue in the [macOS
318   notarization] section of the documentation.
320 ### Added
322 - Users with the [Rust] toolchain installed can now build and install
323   geckodriver from [crates.io] using Cargo:
325   % cargo install geckodriver
327 - Support for [Get Element Shadow Root]
329   Implemented by [David Burns].
331   The standardised WebDriver [Get Element Shadow Root] endpoint provides a way
332   to retrieve the Shadow Root of a given web element. This endpoint is
333   supported by geckodriver when using Firefox version ≥96.
335 - Support for additional hosts and origins
337   Users can now specify a list of allowed `Host` and `Origin` headers for
338   incoming requests using the [`--allow-hosts`] and [`--allow-origins`] command
339   line options, respectively. When such a flag is provided, exactly the given
340   values will be permitted.
342   By default any request with an `Origin` header is rejected, and only requests
343   containing the bound hostname (specified via `--host`), or an IP address,
344   in the Host header are allowed. These configuration options are
345   designed to support scenarios where geckodriver is running on a different
346   network node to the host e.g. some container based setups.
348 ### Fixed
350 - Geckodriver lets Marionette itself select a system allocated port, so that
351   it's no longer required to specify a fixed port when using a custom Firefox
352   profile. This is done by reading the `MarionetteActivePort` file of the
353   Firefox profile in-use. This helps to avoid port collisions when multiple
354   Firefox instances are run in parallel.
356 - It's no longer possible to specify both the `androidPackage` and `binary`
357   capabilities togther within [`moz:firefoxOptions`] because these capabilites
358   are mutually exclusive.
360 ## 0.30.0  (2021-09-16, `d372710b98a6`)
362 ### Security Fixes
364 - CVE-2021-4138
366   Fixed a DNS rebinding issues by enforcing a stricter `Host` header check.
368   Reported by Gabriel Corona.
370   - Improved `Host` header checks to reject requests not sent to a well-known
371     local hostname or IP, or the server-specified hostname.
373 ### Known problems
375 - geckodriver restricts connections to local IP addresses. This can interfere
376   with deployments in which geckodriver is running on a different network node
377   to the tests e.g. some container or virtual-machine based setups.
379 - _macOS 10.15 (Catalina) and later:_
381   Due to the requirement from Apple that all programs must be
382   notarized, geckodriver will not work on Catalina if you manually
383   download it through another notarized program, such as Firefox.
385   Whilst we are working on a repackaging fix for this problem, you can
386   find more details on how to work around this issue in the [macOS
387   notarization] section of the documentation.
389 - _Android:_
391   For releases of Firefox 89.0 and earlier Marionette will only be enabled in
392   GeckoView based applications when the Firefox preference
393   `devtools.debugger.remote-enabled` is set to `true` via [`moz:firefoxOptions`].
395 ### Added
397 - Support for WebDriver clients to opt in to [WebDriver BiDi].
399   Introduced the new boolean capability [`webSocketUrl`] that can be used by
400   WebDriver clients to opt in to a bidirectional connection. A string capability
401   with the same name will be returned by [`NewSession`], which contains the
402   WebSocket URL of the newly created WebDriver session in the form of:
403   `ws://host:port/session/<session id>`.
405   When running on Android a port forward will be set on the host machine,
406   which is using the exact same port as on the device.
408   All the supported WebDriver BiDi commands depend on the version of
409   Firefox, and not geckodriver. The first commands will be shipped in
410   Firefox 94.
412 - It's now possible to set additional preferences when a custom profile has been
413   specified. At the end of the session they will be removed.
415 ### Fixed
417 - Added validation that the `--host` argument resolves to a local IP address.
419 - Limit the `--foreground` argument of Firefox to MacOS only.
421 - Increased Marionette handshake timeout to not fail for slow connections.
423 - `Marionette:Quit` is no longer sent twice during session deletion.
425 - When deleting a session that was attached to an already running browser
426   instance, the browser is not getting closed anymore.
428 - Android
430   - Starting Firefox on Android from a Windows based host will now succeed as
431     we are using the correct Unix path separator to construct on-device paths.
433   - Arguments as specified in [`moz:firefoxOptions`] are now used when starting
434     Firefox.
436   - Port forwards set for Marionette and the WebSocket server ([WebDriver BiDi])
437     are now correctly removed when geckodriver exits.
439   - The test root folder is now removed when geckodriver exists.
441 ## 0.29.1  (2021-04-09, `970ef713fe58`)
443 ### Known problems
445 - _macOS 10.15 (Catalina) and later:_
447   Due to the requirement from Apple that all programs must be
448   notarized, geckodriver will not work on Catalina if you manually
449   download it through another notarized program, such as Firefox.
451   Whilst we are working on a repackaging fix for this problem, you can
452   find more details on how to work around this issue in the [macOS
453   notarization] section of the documentation.
455 - _Android:_
457   Marionette will only be enabled in GeckoView based applications when the
458   Firefox preference `devtools.debugger.remote-enabled` is set to `true` via
459   [`moz:firefoxOptions`]. This will be fixed in the Firefox 90 release for
460   Android.
462 ### Added
464 - When testing GeckoView based applications on Android it's now enough to
465   specify the `androidPackage` capability. The appropriate activity name,
466   and required intent arguments will now automatically be used for
467   applications released by Mozilla.
469 - Native AArch64 (M1) builds of geckodriver for MacOS are now available. These
470   are currently shipped as Tier2 due to missing test infrastructure. Please let
471   us know if you experience issues.
473 ### Fixed
475 - Fixed a stack overflow crash in thread 'webdriver dispatcher' when
476   handling certain device errors.
478 - Fixed an application crash due to missing permissions on unrooted devices
479   by changing the location of the test related files, e.g the profile folder.
480   Therefore the deprecated &#x2D;&#x2D;android-storage command line argument
481   now defaults to the `sdcard` option, which changed its location to
482   `$EXTERNAL_STORAGE/Android/data/%androidPackage%/files/`. With this change
483   proper support for unrooted devices running Android 10+ has been added.
485   _Note_: Do not use the &#x2D;&#x2D;android-storage command line argument
486   anymore unless there is a strong reason. It will be removed in a future
487   release.
489 ## 0.29.0  (2021-01-14, `cf6956a5ec8e`)
491 ### Known problems
493 - _macOS 10.15 (Catalina) and later:_
495   Due to the requirement from Apple that all programs must be
496   notarized, geckodriver will not work on Catalina if you manually
497   download it through another notarized program, such as Firefox.
499   Whilst we are working on a repackaging fix for this problem, you can
500   find more details on how to work around this issue in the [macOS
501   notarization] section of the documentation.
503 - _Android:_
505   Marionette will only be enabled in GeckoView based applications when the
506   Firefox preference `devtools.debugger.remote-enabled` is set to `true` via
507   [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
508   for Android releases.
510   In some cases geckodriver could crash due to a stack overflow when handling
511   certain device errors.
513   On unrooted Android 10+ devices startup crashes of the application can be
514   experienced due to an inappropriate location of test related files, e.g the
515   profile folder.
517 ### Added
519 - Introduced the new boolean capability [`moz:debuggerAddress`] that can be used
520   to opt-in to the experimental Chrome DevTools Protocol (CDP) implementation.
521   A string capability with the same name will be returned by [`NewSession`],
522   which contains the `host:port` combination of the HTTP server that can be
523   used to query for websockets of available targets.
525   Note: For this experimental feature the site-isolation support of
526   Firefox aka [Fission] will be not available.
528 ## 0.28.0  (2020-11-03, `c00d2b6acd3f`)
530 ### Known problems
532 - _macOS 10.15 (Catalina) and later:_
534   Due to the requirement from Apple that all programs must be
535   notarized, geckodriver will not work on Catalina if you manually
536   download it through another notarized program, such as Firefox.
538   Whilst we are working on a repackaging fix for this problem, you can
539   find more details on how to work around this issue in the [macOS
540   notarization] section of the documentation.
542 - _Android:_
544   Marionette will only be enabled in GeckoView based applications when the
545   Firefox preference `devtools.debugger.remote-enabled` is set to `true` via
546   [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
547   for Android releases.
549   In some cases geckodriver could crash due to a stack overflow when handling
550   certain device errors.
552   On unrooted Android 10+ devices startup crashes of the application can be
553   experienced due to an inappropriate location of test related files, e.g the
554   profile folder.
556 ### Added
558 - The command line flag `--android-storage` has been added, to allow geckodriver
559   to also control Firefox on root-less Android devices.
560   See the [documentation][Flags] for available values.
562 ### Fixed
564 - Firefox can be started again via a shell script that is located outside of the
565   Firefox directory on Linux.
567 - If Firefox cannot be started by geckodriver the real underlying error message is
568   now being reported.
570 - Version numbers for minor and extended support releases of Firefox are now parsed correctly.
572 ### Removed
574 - Since Firefox 72 extension commands for finding an element’s anonymous children
575   and querying its attributes are no longer needed, and have been removed.
577 ## 0.27.0  (2020-07-27, `7b8c4f32cdde`)
579 ### Security Fixes
581 - CVE-2020-15660
583   Improved validation of incoming requests to prevent remote
584   requests being treated as local.
586   Reported by Gabriel Corona.
588   - Added additional checks on the `Content-Type` header for `POST`
589     requests to disallow `application/x-www-form-urlencoded`,
590     `multipart/form-data` and `text/plain`.
592   - Added checking of the `Origin` header for `POST` requests.
594   - The version number of Firefox is now checked when establishing a session.
596 ### Known problems
598 - _macOS 10.15 (Catalina) and later:_
600   Due to the requirement from Apple that all programs must be
601   notarized, geckodriver will not work on Catalina if you manually
602   download it through another notarized program, such as Firefox.
604   Whilst we are working on a repackaging fix for this problem, you can
605   find more details on how to work around this issue in the [macOS
606   notarization] section of the documentation.
608 - _Android:_
610   Marionette will only be enabled in GeckoView based applications when the
611   Firefox preference `devtools.debugger.remote-enabled` is set to `true` via
612   [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
613   for Android releases.
615   In some cases geckodriver could crash due to a stack overflow when handling
616   certain device errors.
618 ### Added
620 - To set environment variables for the launched Firefox for Android,
621   it is now possible to add an `env` object on [`moz:firefoxOptions`]
622   (note: this is not supported for Firefox Desktop)
624 - Support for print-to-PDF
626   The newly standardised WebDriver [Print] endpoint provides a way to
627   render pages to a paginated PDF representation. This endpoint is
628   supported by geckodriver when using Firefox version ≥78.
630 - Support for same-site cookies
632   Cookies can now be set with a `same-site` parameter, and the value
633   of that parameter will be returned when cookies are
634   retrieved. Requires Firefox version ≥79. Thanks to [Peter Major] for
635   the patch.
637 ### Fixed
639 - _Android:_
641   - Firefox running on Android devices can now be controlled from a Windows host.
643   - Setups with multiple connected Android devices are now supported.
645   - Improved cleanup of configuration files. This prevents crashes if
646     the application is started manually after launching it through
647     geckodriver.
649 - Windows and Linux binaries are again statically linked.
651 ## 0.26.0  (2019-10-12, `e9783a644016'`)
653 Note that with this release the minimum recommended Firefox version
654 has changed to Firefox ≥60.
656 ### Known problems
658 - _macOS 10.15 (Catalina) and later:_
660   Due to the recent requirement from Apple that all programs must
661   be notarized, geckodriver will not work on Catalina if you manually
662   download it through another notarized program, such as Firefox.
664   Whilst we are working on a repackaging fix for this problem, you
665   can find more details on how to work around this issue in the
666   [macOS notarization] section of the documentation.
668 - _Windows:_
670   You must still have the [Microsoft Visual Studio redistributable
671   runtime] installed on your system for the binary to run.  This
672   is a known bug which we weren't able fix for this release.
674 - _Android:_
676   Marionette will only be enabled in GeckoView based applications when the
677   Firefox preference `devtools.debugger.remote-enabled` is set to `true` via
678   [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
679   for Android releases.
681   In some cases geckodriver could crash due to a stack overflow when handling
682   certain device errors.
684 ### Added
686 - Support for Firefox on Android
688   Starting with this release geckodriver is able to connect to
689   Firefox on Android systems, and to control packages based on
690   [GeckoView].
692   Support for Android works by the geckodriver process running on
693   a host system and Firefox running within either an emulator or
694   on a physical device connected to the host system.  This requires
695   you to first [enable remote debugging on the Android device].
697   The WebDriver client must set the [`platformName` capability] to
698   "`android`" and the `androidPackage` capability within
699   [`moz:firefoxOptions`] to the Android package name of the Firefox
700   application.
702   The full list of new capabilities specific to Android, instructions
703   how to use them, and examples can be found in the [`moz:firefoxOptions`]
704   documentation on MDN.
706   When the session is created, the `platformName` capability will
707   return "`android`" instead of reporting the platform of the host
708   system.
710 ### Changed
712 - Continued Marionette refactoring changes
714   0.25.0 came with a series of internal changes for how geckodriver
715   communicates with Firefox over the Marionette protocol.  This
716   release contains the second half of the refactoring work.
718 ### Fixed
720 - Connection attempts to Firefox made more reliable
722   geckodriver now waits for the Marionette handshake before assuming
723   the session has been established.  This should improve reliability
724   in creating new WebDriver sessions.
726 - Corrected error codes used during session creation
728   When a new session was being configured with invalid input data,
729   the error codes returned was not always consistent.  Attempting
730   to start a session with a malformed capabilities configuration
731   will now return the [`invalid argument`] error consistently.
733 ## 0.25.0 (2019-09-09, `bdb64cf16b68`)
735 __Note to Windows users!__
736 With this release you must have the [Microsoft Visual Studio redistributable runtime]
737 installed on your system for the binary to run.
738 This is a [known bug](https://github.com/mozilla/geckodriver/issues/1617)
739 with this particular release that we intend to release a fix for soon.
741 ### Added
743 - Added support for HTTP `HEAD` requests to the HTTPD
745   geckodriver now responds correctly to HTTP `HEAD` requests,
746   which can be used for probing whether it supports a particular API.
748   Thanks to [Bastien Orivel] for this patch.
750 - Added support for searching for Nightly’s default path on macOS
752   If the location of the Firefox binary is not given, geckodriver
753   will from now also look for the location of Firefox Nightly in
754   the default locations.  The ordered list of search paths on macOS
755   is as follows:
757     1. `/Applications/Firefox.app/Contents/MacOS/firefox-bin`
758     2. `$HOME/Applications/Firefox.app/Contents/MacOS/firefox-bin`
759     3. `/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin`
760     4. `$HOME/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin`
762   Thanks to [Kriti Singh] for this patch.
764 - Support for application bundle paths on macOS
766   It is now possible to pass an application bundle path, such as
767   `/Applications/Firefox.app` as argument to the `binary` field in
768   [`moz:firefoxOptions`].  This will be automatically resolved to
769   the absolute path of the binary when Firefox is started.
771   Thanks to [Nupur Baghel] for this patch.
773 - macOS and Windows builds are signed
775   With this release of geckodriver, executables for macOS and Windows
776   are signed using the same certificate key as Firefox.  This should
777   help in cases where geckodriver previously got misidentified as
778   a virus by antivirus software.
780 ### Removed
782 - Dropped support for legacy Selenium web element references
784   The legacy way of serialising web elements, using `{"ELEMENT": <UUID>}`,
785   has been removed in this release.  This may break older Selenium
786   clients and clients which are otherwise not compatible with the
787   WebDriver standard.
789   Thanks to [Shivam Singhal] for this patch.
791 - Removed `--webdriver-port` command-line option
793   `--webdriver-port <PORT>` was an undocumented alias for `--port`,
794   initially used for backwards compatibility with clients
795   prior to Selenium 3.0.0.
797 ### Changed
799 - Refactored Marionette serialisation
801   Much of geckodriver’s internal plumbing for serialising WebDriver
802   requests to Marionette messages has been refactored to decrease
803   the amount of manual lifting.
805   This work should have no visible side-effects for users.
807   Thanks to [Nupur Baghel] for working on this throughout her
808   Outreachy internship at Mozilla.
810 - Improved error messages for incorrect command-line usage
812 ### Fixed
814 - Errors related to incorrect command-line usage no longer hidden
816   By mistake, earlier versions of geckodriver failed to print incorrect
817   flag use.  With this release problems are again written to stderr.
819 - Search system path for Firefox binary on BSDs
821   geckodriver would previously only search the system path for the
822   `firefox` binary on Linux.  Now it supports different BSD flavours
823   as well.
825 ## 0.24.0 (2019-01-28, `917474f3473e`)
827 ### Added
829 - Introduces `strictFileInteractability` capability
831   The new capability indicates if strict interactability checks
832   should be applied to `<input type=file>` elements.  As strict
833   interactability checks are off by default, there is a change
834   in behaviour when using [Element Send Keys] with hidden file
835   upload controls.
837 - Added new endpoint `GET /session/{session id}/moz/screenshot/full`
838   for taking full document screenshots, thanks to Greg Fraley.
840 - Added new `--marionette-host <hostname>` flag for binding to a
841   particular interface/IP layer on the system.
843 - Added new endpoint `POST /session/{session_id}/window/new`
844   for the [New Window] command to create a new top-level browsing
845   context, which can be either a window or a tab. The first version
846   of Firefox supporting this command is Firefox 66.0.
848 - When using the preference `devtools.console.stdout.content` set to
849   `true` logging of console API calls like `info()`, `warn()`, and
850   `error()` can be routed to stdout.
852 - geckodriver now sets the `app.update.disabledForTesting` preference
853   to prevent Firefox >= 65 from automatically updating whilst under
854   automation.
856 ### Removed
858 - ARMv7 HF builds have been discontinued
860   We announced back in September 2018 that we would stop building for ARM,
861   but builds can be self-serviced by building from source.
863   To cross-compile from another host system, you can use this command:
865    % cargo build --target armv7-unknown-linux-gnueabihf
867 ### Changed
869 - Allow file uploads to hidden `<input type=file>` elements
871   Through a series of changes to the WebDriver specification,
872   geckodriver is now aligned with chromedriver’s behaviour that
873   allows interaction with hidden `<input type=file>` elements.
875   This allows WebDriver to be used with various popular web
876   frameworks that—through indirection—hides the file upload control
877   and invokes it through other means.
879 - Allow use of an indefinite script timeout for the [Set Timeouts]
880   command, thanks to reimu.
882 ### Fixed
884 - Corrected `Content-Type` of response header to `utf-8` to fix
885   an HTTP/1.1 compatibility bug.
887 - Relaxed the deserialization of timeouts parameters to allow unknown
888   fields for the [Set Timeouts] command.
890 - Fixed a regression in the [Take Element Screenshot] to not screenshot
891   the viewport, but the requested element.
893 ## 0.23.0 (2018-10-03)
895 This release contains a number of fixes for regressions introduced
896 in 0.22.0, where we shipped a significant refactoring to the way
897 geckodriver internally dealt with JSON serialisation.
899 ### Removed
901 - The POST `/session/{session id}/element/{element id}/tap` endpoint
902   was removed, thanks to Kerem Kat.
904 ### Changed
906 - [webdriver crate] upgraded to 0.38.0.
908 ### Fixed
910 - `desiredCapabilities` and `requiredCapabilities` are again
911   recognised on session creation
913   A regression in 0.22.0 caused geckodriver to recognise `desired`
914   and `required` instead of the correct `desiredCapabilities`
915   and `requiredCapabilities`.  This will have caused significant
916   problems for users who relied on this legacy Selenium-style
917   session creation pattern.
919   Do however note that support for Selenium-styled new session
920   requests is temporary and that this will be removed sometime
921   before the 1.0 release.
923 - `duration` field made optional on pause actions
925   A regression in 0.22.0 caused the pause action primitive to
926   require a `duration` field.  This has now been fixed so that
927   pauses in action chains can be achieved with the default duration.
929 - Log level formatted to expected Marionette input
931   A regression in 0.22.0 caused the log level to be improperly
932   formatted when using Firefox pre-releases.  This is now fixed so
933   that the requested log level is correctly interpreted by Marionette.
935 - `temporary` field on addon installation made optional
937   A regression in 0.22.0 caused the `temporary` field for POST
938   `/session/{session id}/moz/addon/install` to be mandatory.  This has
939   now been fixed so that an addon is installed permanently by default.
941 - SHA1s in version information uses limited number of characters
943   The SHA1 used in `--version` when building geckodriver from a
944   git repository is now limited to 12 characters, as it is when
945   building from an hg checkout.  This ensures reproducible builds.
947 ## 0.22.0 (2018-09-15)
949 This release marks an important milestone on the path towards
950 a stable release of geckodriver.  Large portions of geckodriver
951 and the [webdriver] library it is based on has been refactored to
952 accommodate using [serde] for JSON serialization.
954 We have also made great strides to improving [WebDriver conformance],
955 to the extent that geckodriver is now _almost_ entirely conforming
956 to the standard.
958 ### Added
960 - Support for WebDriver web element-, web frame-, and web window
961   identifiers from Firefox.
963 - Added support for the non-configurable `setWindowRect` capability
964   from WebDriver.
966   This capability informs whether the attached browser supports
967   manipulating the window dimensions and position.
969 - A new extension capability `moz:geckodriverVersion` is returned
970   upon session creation.
972 ### Changed
974 - All JSON serialization and deserialisation has moved from
975   rustc_serialize to [serde].
977 - The HTTP status codes used for [script timeout] and [timeout]
978   errors has changed from Request Timeout (408) to Internal Server
979   Error (500) in order to not break HTTP/1.1 `Keep-Alive` support,
980   as HTTP clients interpret the old status code to mean they should
981   duplicate the request.
983 - The HTTP/1.1 `Keep-Alive` timeout for persistent connections  has
984   been increased to 90 seconds.
986 - An [invalid session ID] error is now returned when there is no
987   active session.
989 - An [invalid argument] error is now returned when [Add Cookie]
990   is given invalid parameters.
992 - The handshake when geckodriver connects to Marionette has been
993   hardened by killing the Firefox process if it fails.
995 - The handshake read timeout has been reduced to 10 seconds instead
996   of waiting forever.
998 - The HTTP server geckodriver uses, [hyper], has been upgraded to
999   version 0.12, thanks to [Bastien Orivel].
1001 - geckodriver version number is no longer logged on startup, as
1002   the log level is not configured until a session is created.
1004   The version number is available through `--version`, and now
1005   also through a new `moz:geckodriverVersion` field in the matched
1006   capabilities.
1008 - [webdriver crate] upgraded to 0.37.0.
1010 ### Fixed
1012 - Parsing [timeout object] values has been made WebDriver conforming,
1013   by allowing floats as input.
1015 - Implicit downloads of OpenH264 and Widevine plugins has been disabled.
1017 - The commit hash and date displayed when invoking `--version`
1018   is now well-formatted when built from an hg repository, thanks to
1019   [Jeremy Lempereur].
1021 - Many documentation improvements, now published on
1022   <https://firefox-source-docs.mozilla.org/testing/geckodriver/>.
1024 ## 0.21.0 (2018-06-15)
1026 Note that with this release of geckodriver the minimum recommended
1027 Firefox and Selenium versions have changed:
1029 - Firefox 57 (and greater)
1030 - Selenium 3.11 (and greater)
1032 ### Added
1034 - Support for the chrome element identifier from Firefox.
1036 - The `unhandledPromptBehavior` capability now accepts `accept and
1037   notify`, `dismiss and notify`, and `ignore` options.
1039   Note that the unhandled prompt handler is not fully supported in
1040   Firefox at the time of writing.
1042 ### Changed
1044 - Firefox will now be started with the `-foreground` and `-no-remote`
1045   flags if they have not already been specified by the user in
1046   [`moz:firefoxOptions`].
1048   `-foreground` will ensure the application window gets focus when
1049   Firefox is started, and `-no-remote` will prevent remote commands
1050   to this instance of Firefox and also ensure we always start a new
1051   instance.
1053 - WebDriver commands that do not have a return value now correctly
1054   return `{value: null}` instead of an empty dictionary.
1056 - The HTTP server now accepts `Keep-Alive` connections.
1058 - Firefox remote protocol command mappings updated.
1060   All Marionette commands changed to make use of the `WebDriver:`
1061   prefixes introduced with Firefox 56.
1063 - Overhaul of Firefox preferences.
1065   Already deprecated preferences in Firefox versions earlier than
1066   57 got removed.
1068 - [webdriver crate] upgraded to 0.36.0.
1070 ### Fixed
1072 - Force use of IPv4 network stack.
1074   On certain system configurations, where `localhost` resolves to
1075   an IPv6 address, geckodriver would attempt to connect to Firefox
1076   on the wrong IP stack, causing the connection attempt to time out
1077   after 60 seconds.  We now ensure that geckodriver uses IPv4
1078   consistently to both connect to Firefox and for allocating a free
1079   port.
1081 - geckodriver failed to locate the correct Firefox binary if it was
1082   found under a _firefox_ or _firefox-bin_ directory, depending on
1083   the system, because it thought the parent directory was the
1084   executable.
1086 - On Unix systems (macOS, Linux), geckodriver falsely reported
1087   non-executable files as valid binaries.
1089 - When stdout and stderr is redirected by geckodriver, a bug prevented
1090   the redirections from taking effect.
1092 ## 0.20.1 (2018-04-06)
1094 ### Fixed
1096 - Avoid attempting to kill Firefox process that has stopped.
1098   With the change to allow Firefox enough time to shut down in
1099   0.20.0, geckodriver started unconditionally killing the process
1100   to reap its exit status.  This caused geckodriver to inaccurately
1101   report a successful Firefox shutdown as a failure.
1103   The regression should not have caused any functional problems, but
1104   the termination cause and the exit status are now reported correctly.
1106 ## 0.20.0 (2018-03-08)
1108 ### Added
1110 - New `--jsdebugger` flag to open the [Browser Toolbox] when Firefox
1111   launches.  This is useful for debugging Marionette internals.
1113 - Introduced the temporary, boolean capability
1114   `moz:useNonSpecCompliantPointerOrigin` to disable the WebDriver
1115   conforming behavior of calculating the Pointer Origin.
1117 ### Changed
1119 - HTTP status code for the [`StaleElementReference`] error changed
1120   from 400 (Bad Request) to 404 (Not Found).
1122 - Backtraces from geckodriver no longer substitute for missing
1123   Marionette stacktraces.
1125 - [webdriver crate] upgraded to 0.35.0.
1127 ### Fixed
1129 - The Firefox process is now given ample time to shut down, allowing
1130   enough time for the Firefox shutdown hang monitor to kick in.
1132   Firefox has an integrated background monitor that observes
1133   long-running threads during shutdown.  These threads will be
1134   killed after 63 seconds in the event of a hang.  To allow Firefox
1135   to shut down these threads on its own, geckodriver has to wait
1136   that time and some additional seconds.
1138 - Grapheme clusters are now accepted as input for keyboard input
1139   to actions.
1141   Input to the `value` field of the `keyDown` and `keyUp` action
1142   primitives used to only accept single characters, which means
1143   geckodriver would error when a valid grapheme cluster was sent in,
1144   for example with the tamil nadu character U+0BA8 U+0BBF.
1146   Thanks to Greg Fraley for fixing this bug.
1148 - Improved error messages for malformed capability values.
1150 ## 0.19.1 (2017-10-30)
1152 ### Changed
1154 - Search suggestions in the location bar turned off as not to
1155   trigger network connections
1157 - Block addons incompatible with E10s
1159 ### Fixed
1161 - Marionette stacktraces are now correctly propagated
1163 - Some error messages have been clarified
1165 ### Removed
1167 - Removed obsolete `socksUsername` and `socksPassword` proxy
1168   configuration keys because neither were picked up or recognised
1170 ## 0.19.0 (2017-09-16)
1172 Note that with geckodriver 0.19.0 the following versions are recommended:
1174 - Firefox 55.0 (and greater)
1175 - Selenium 3.5 (and greater)
1177 ### Added
1179 - Added endpoint:
1180   - POST `/session/{session id}/window/minimize` for the [Minimize Window]
1181     command
1183 - Added preference `extensions.shield-recipe-client.api_url` to disable
1184   shield studies which could unexpectedly change the behavior of Firefox
1186 - Introduced the temporary, boolean capability `moz:webdriverClick` to
1187   enable the WebDriver conforming behavior of the [Element Click] command
1189 - Added crashreporter environment variables to better control the browser
1190   in case of crashes
1192 - Added preference `dom.file.createInChild` set to true to allow file
1193   object creation in content processes
1195 ### Changed
1197 - Log all used application arguments and not only `-marionette`
1199 - Early abort connection attempts to Marionette if the Firefox process
1200   closed unexpectetly
1202 - Removed deprecated `socksProxyVersion` in favor of `socksVersion`
1204 - Removed `ftpProxyPort`, `httpProxyPort`, `sslProxyPort`, and
1205   `socksProxyPort` because _ports_ have to be set for `ftpProxy`,
1206   `httpProxy`, `sslProxy`, and `socksProxy` using ":<PORT>"
1208 - The `proxyType` `noproxy` has been replaced with `direct` in accordance
1209   with recent WebDriver specification changes
1211 - The [`WindowRectParameters`] have been updated to return signed 32-bit
1212   integers in accordance with the CSS and WebDriver specifications, and
1213   to be more liberal with the input types
1215 - Mapped the [`FullscreenWindow`] to the correct Marionette command
1217 - To make sure no browser process is left behind when the [`NewSession`]
1218   fails, the process is closed immediately now
1220 - `/moz/addon/install` command accepts an `addon` parameter, in lieu of
1221   `path`, containing an addon as a Base64 string (fixed by [Jason Juang])
1223 - [webdriver crate] upgraded to version 0.31.0
1225 - [mozrunner crate] upgraded to version 0.5.0
1227 ### Removed
1229 - Removed the following obsolete preferences for Firefox:
1230   - `browser.safebrowsing.enabled`
1231   - `browser.safebrowsing.forbiddenURIs.enabled`
1232   - `marionette.defaultPrefs.port`
1233   - `marionette.logging`
1235 ## 0.18.0 (2017-07-10)
1237 ### Changed
1239 - [`RectResponse`] permits returning floats for `width` and `height`
1240   fields
1242 - New type [`CookieResponse`] for the [`GetNamedCookie`] command returns
1243   a single cookie, as opposed to an array of a single cookie
1245 - To pick up a prepared profile from the filesystem, it is now possible
1246   to pass `["-profile", "/path/to/profile"]` in the `args` array on
1247   [`moz:firefoxOptions`]
1249 - geckodriver now recommends Firefox 53 and greater
1251 - Version information (`--version`) contains the hash from from the
1252   commit used to build geckodriver
1254 - geckodriver version logged on startup
1256 - [webdriver crate] upgraded to version 0.27.0
1258 - [mozrunner crate] upgraded to version 0.4.1
1260 ### Fixed
1262 - The [`SetTimeouts`] command maps to the Marionette `setTimeouts`
1263   command, which makes geckodriver compatible with Firefox 56 and greater
1265 - Linux x86 (i686-unknown-linux-musl) builds are fixed
1267 ## 0.17.0 (2017-06-09)
1269 ### Added
1271 - Added endpoints:
1272   - POST `/session/{session id}/window/fullscreen` to invoke the window
1273     manager-specific `full screen` operation
1274   - POST `/session/{session id}/moz/addon/install` to install an extension
1275     (Gecko only)
1276   - POST `/session/{session id}/moz/addon/uninstall` to uninstall an
1277     extension (Gecko only)
1279 ### Changed
1281 - Increasing the length of the `network.http.phishy-userpass-length`
1282   preference will cause Firefox to not prompt when navigating to a
1283   website with a username or password in the URL
1285 - Library dependencies upgraded to mozrunner 0.4 and mozprofile 0.3
1286   to allow overriding of preferences via capabilities if those have been
1287   already set in the profile
1289 - Library dependencies upgraded to mozversion 0.1.2 to only use the
1290   normalized path of the Firefox binary for version checks but not to
1291   actually start the browser, which broke several components in Firefox
1292   on Windows
1294 ### Fixed
1296 - The [SetWindowRect] command now returns the [WindowRectResponse]
1297   when it is done
1299 - Use ASCII versions of array symbols to properly display them in the
1300   Windows command prompt
1302 - Use [`SessionNotCreated`] error instead of [`UnknownError`] if there
1303   is no current session
1305 ## 0.16.1 (2017-04-26)
1307 ### Fixed
1309 - Read Firefox version number from stdout when failing
1310   to look for the application .ini file (fixes [Selenium
1311   #3884](https://github.com/SeleniumHQ/selenium/issues/3884))
1313 - Session is now ended when closing the last Firefox window (fixes
1314   [#613](https://github.com/mozilla/geckodriver/issues/613))
1316 ## 0.16.0 (2017-04-21)
1318 Note that geckodriver v0.16.0 is only compatible with Selenium 3.4
1319 and greater.
1321 ### Added
1323 - Support for WebDriver-conforming [New Session] negotiation, with
1324   `desiredCapabilities`/`requiredCapabilities` negotiation as fallback
1326 - Added two new endpoints:
1327   - GET `/session/{session id}/window/rect` for [Get Window Rect]
1328   - POST `/session/{session id}/window/rect` for [Set Window Rect]
1330 - Align errors with the [WebDriver errors]:
1331   - Introduces new errors [`ElementClickIntercepted`],
1332   [`ElementNotInteractable`], [`InvalidCoordinates`], [`NoSuchCookie`],
1333   [`UnableToCaptureScreen`], and [`UnknownCommand`]
1334   - Removes `ElementNotVisible` and `InvalidElementCoordinates` errors
1336 ### Removed
1338 - Removed following list of unused endpoints:
1339   - GET `/session/{session id}/alert_text`
1340   - POST `/session/{session id}/alert_text`
1341   - POST `/session/{session id}/accept_alert`
1342   - POST `/session/{session id}/dismiss_alert`
1343   - GET `/session/{session id}/window_handle`
1344   - DELETE `/session/{session id}/window_handle`
1345   - POST `/session/{session id}/execute_async`
1346   - POST `/session/{session id}/execute`
1348 ### Changed
1350 - [`SendKeysParameters`], which is used for the [Element Send Keys] and
1351   [Send Alert Text] commands, has been updated to take a string `text`
1352   field
1354 - [`CookieResponse`] and [`CloseWindowResponse`] fixed to be properly
1355   wrapped in a `value` field, like other responses
1357 - Allow negative numbers for `x` and `y` fields in `pointerMove` action
1359 - Disable Flash and the plugin container in Firefox by
1360   default, which should help mitigate the “Plugin Container
1361   for Firefox has stopped working” problems [many users were
1362   reporting](https://github.com/mozilla/geckodriver/issues/225) when
1363   deleting a session
1365 - Preferences passed in a profile now take precedence over
1366   set of default preferences defined by geckodriver (fixed by
1367   [Marc Fisher](https://github.com/DrMarcII))
1368   - The exceptions are the `marionette.port` and `marionette.log.level`
1369     preferences and their fallbacks, which are set unconditionally and
1370     cannot be overridden
1372 - Remove default preference that disables unsafe CPOW checks
1374 - WebDriver library updated to 0.25.2
1376 ### Fixed
1378 - Fix for the “corrupt deflate stream” exception that
1379   sometimes occurred when trying to write an empty profile by
1380   [@kirhgoph](https://github.com/kirhgoph)
1382 - Recognise `sslProxy` and `sslProxyPort` entries in the proxy
1383   configuration object (fixed by [Jason Juang])
1385 - Fix “`httpProxyPort` was not an integer” error (fixed by [Jason
1386   Juang])
1388 - Fix broken unmarshaling of _Get Timeouts_ response format from Firefox
1389   52 and earlier (fixed by [Jason Juang])
1391 - Allow preferences in [`moz:firefoxOptions`] to be both positive- and
1392   negative integers (fixed by [Jason Juang])
1394 - Allow IPv6 hostnames in the proxy configuration object
1396 - i686-unknown-linux-musl (Linux 32-bit) build fixed
1398 - Log messages from other Rust modules are now ignored
1400 - Improved log messages to the HTTPD
1402 ## 0.15.0 (2017-03-08)
1404 ### Added
1406 - Added routing and parsing for the [Get Timeouts] command
1408 ### Changed
1410 - All HTTP responses are now wrapped in `{value: …}` objects per the
1411   WebDriver specification; this may likely require you to update your
1412   client library
1414 - Pointer move action’s `element` key changed to `origin`, which
1415   lets pointer actions originate within the context of the viewport,
1416   the pointer’s current position, or from an element
1418 - Now uses about:blank as the new tab document; this was previously
1419   disabled due to [bug 1333736](https://bugzil.la/1333736) in Marionette
1421 - WebDriver library updated to 0.23.0
1423 ### Fixed
1425 - Aligned the data structure accepted by the [Set Timeouts] command with
1426   the WebDriver specification
1428 ## 0.14.0 (2017-01-31)
1430 ### Changed
1432 - Firefox process is now terminated and session ended when the last
1433   window is closed
1435 - WebDriver library updated to version 0.20.0
1437 ### Fixed
1439 - Stacktraces are now included when the error originates from within
1440   the Rust stack
1442 - HTTPD now returns correct response headers for `Content-Type` and
1443   `Cache-Control` thanks to [Mike Pennisi]
1445 ## 0.13.0 (2017-01-06)
1447 ### Changed
1449 - When navigating to a document with an insecure- or otherwise invalid
1450   TLS certificate, an [insecure certificate] error will be returned
1452 - On macOS, deducing Firefox’ location on the system will look for
1453   _firefox-bin_ on the system path (`PATH` environmental variable) before
1454   looking in the applications folder
1456 - Window position coordinates are allowed to be negative numbers, to
1457   cater for maximised window positioning on Windows
1459 - WebDriver library updated to version 0.18.0
1461 ### Fixed
1463 - Check for single-character key codes in action sequences now counts
1464   characters instead of bytes
1466 ## 0.12.0 (2017-01-03)
1468 ### Added
1470 - Added [Take Element Screenshot] command
1472 - Added new [Status] command
1474 - Added routing for the [Get Timeouts] command, but it is not yet
1475   implemented in Marionette, and will return an _unsupported operation_
1476   error until it is
1478 - Implemented routing for [new actions API](Actions), but it too is not
1479   yet fully implemented in Marionette
1481 ### Changed
1483 - [Synced Firefox
1484   preferences](https://github.com/mozilla/geckodriver/commit/2bfdc3ec8151c427a6a75a6ba3ad203459540495)
1485   with those used in Mozilla automation
1487 - Default log level for debug builds of Firefox, which used to be `DEBUG`,
1488   changed to `INFO`-level
1490 - WebDriver library dependency upgraded to 0.17.1
1492 - Using _session not created_ error when failing to start session
1494 - geckodriver will exit with exit code 69 to indicate that the port
1495   is unavailable
1497 ### Fixed
1499 - Improved logging when starting Firefox
1501 - Reverted to synchronous logging, which should address cases of
1502   inconsistent output when failing to bind to port
1504 - Clarified in README that geckodriver is not supported on Windows XP
1506 - Added documentation of supported capabilities to [README]
1508 - Included capabilities example in the [README]
1510 ## 0.11.1 (2016-10-10)
1512 ### Fixed
1514 - Version number in binary now reflects the release version
1516 ## 0.11.0 (2016-10-10)
1518 ### Added
1520 - Introduced continuous integration builds for Linux- and Windows 32-bit
1521   binaries
1523 - Added commands for setting- and getting the window position
1525 - Added new extension commands for finding an element’s anonymous
1526   children and querying its attributes; accessible through the
1527   `/session/{sessionId}/moz/xbl/{elementId}/anonymous_children`
1528   to return all anonymous children and
1529   `/session/{sessionId}/moz/xbl/{elementId}/anonymous_by_attribute` to
1530   return an anonymous element by a name and attribute query
1532 - Introduced a [`moz:firefoxOptions`] capability to customise a Firefox
1533   session:
1535   - The `binary`, `args`, and `profile` entries on this dictionary
1536     is equivalent to the old `firefox_binary`, `firefox_args`, and
1537     `firefox_profile` capabilities, which have now all been removed
1539   - The `log` capability takes a dictionary such as `{log: "trace"}`
1540     to enable trace level verbosity in Gecko
1542   - The `prefs` capability lets you define Firefox preferences through
1543     capabilities
1545 - Re-introduced the `--webdriver-port` argument as a hidden alias to
1546   `--port`
1548 ### Changed
1550 - `firefox_binary`, `firefox_args`, and `firefox_profile` capabilities
1551   removed in favour of the [`moz:firefoxOptions`] dictionary detailed above
1552   and in the [README]
1554 - Removed `--no-e10s` flag, and geckodriver will from now rely on the
1555   Firefox default multiprocessing settings (override using preferences)
1557 - Disable pop-up blocker in the default profile by @juangj
1559 - Changed Rust compiler version to 1.12 (beta)
1560   temporarily because of [trouble linking Musl
1561   binaries](https://github.com/rust-lang/rust/issues/34978)
1563 - Replaced _env_logger_ logging facility with the _slog_ package,
1564   causing the `RUST_LOG` environment variable to no longer have any affect
1566 - Updated the WebDriver Rust library to version 0.15
1568 ### Fixed
1570 - Corrected link to repository in Cargo metadata
1572 - Verbosity shorthand flag `-v[v]` now works again, following the
1573   replacement of the argument parsing library in the previous release
1575 - When the HTTPD fails to start, errors are propagated to the user
1577 - Disabled the additional welcome URL
1578   (`startup.homepage_welcome_url.additional`) so that officially branded
1579   Firefox builds do not start with two open tabs in fresh profiles
1581 - Disabled homepage override URL redirection on milestone upgrades,
1582   which means a tab with an upgrade notice is not displayed when launching
1583   a new Firefox version
1585 ## 0.10.0 (2016-08-02)
1587 ### Changed
1589 - Use multi-process Firefox (e10s) by default, added flag `--no-e10s`
1590   to disable it and removed `--e10s` flag
1592 - Disable autofilling of forms by default by [Sven Jost]
1594 - Replace _argparse_ with _clap_ for arguments parsing
1596 ### Fixed
1598 - Attempt to deploy a single file from Travis when making a release
1600 - Grammar fix in [README]
1602 ## 0.9.0 (2016-06-30)
1604 ### Added
1606 - Add ability to use `firefox_binary` capability to define location of
1607   Firefox to use
1609 - Automatically detect the default Firefox path if one is not given
1611 - Cross-compile to Windows and ARMv7 (HF) in CI
1613 - Add Musl C library-backed static binaries in CI
1615 - Add `-v`, `-vv`, and `--log LEVEL` flags to increase Gecko verbosity
1617 - Add Get Element Property endpoint
1619 - Add new `--version` flag showing copying information and a link to
1620   the repository
1622 ### Changed
1624 - Now connects to a Marionette on a random port by default
1626 - Update webdriver-rust library dependency
1628 - Migrated to use Travis to deploy new releases
1630 - Reduced amount of logging
1632 - Introduced a changelog (this)
1634 ## 0.8.0 (2016-06-07)
1636 ### Added
1638 - Allow specifying array of arguments to the Firefox binary through the
1639   `firefox_args` capability
1641 - Pass parameters with [New Session] command
1643 ### Changed
1645 - Change product name to _geckodriver_
1647 - Make README more exhaustive
1649 - Quit Firefox when deleting a session
1651 - Update webdriver-rust library
1653 - Update dependencies
1655 ### Fixed
1657 - Fix tests
1659 - FIx typo in error message for parsing errors
1661 ## 0.7.1 (2016-04-27)
1663 ### Added
1665 - Add command line flag for using e10s enabled Firefox by [Kalpesh
1666   Krishna]
1668 - Allow providing custom profiles
1670 ### Changed
1672 - Allow binding to an IPv6 address by [Jason Juang]
1674 - By default, connect to host-agnostic localhost by [Jason Juang]
1676 - Make `GeckoContextParameters` public
1678 - Update dependencies
1680 ### Fixed
1682 - Squash rustc 1.6 warnings by using `std::thread::sleep(dur: Duration)`
1684 ## 0.6.2 (2016-01-20)
1686 ### Added
1688 - Add LICENSE file from [Joshua Burning]
1690 - Schedule builds in CI on pushes and pull requests
1692 ### Changed
1694 - Enable CPOWs in Marionette
1696 ## 0.6.0 (2016-01-12)
1698 ### Added
1700 - Add Get Page Source endpoint
1702 ### Changed
1704 - Handle arrays being sent from Marionette
1706 - Correct build steps in [README]
1708 - Update what properties are read from errors sent by Marionette
1710 - Update dependencies
1712 ## 0.5.0 (2015-12-10)
1714 ### Changed
1716 - Update argparse dependency to use Cargo
1718 - Update to the latest version of the Marionette wire protocol
1720 - Update to latest webdriver-rust library
1722 - Update dependencies
1724 ## 0.4.2 (2015-10-02)
1726 ### Changed
1728 - Skip compiling optional items in hyper
1730 ## 0.4.1 (2015-10-02)
1732 ### Changed
1734 - Update webdriver-rust library
1736 - Update dependencies
1738 ## 0.4.0 (2015-09-28)
1740 ### Added
1742 - Add command extensions for switching between content- and chrome
1743   contexts
1745 - Add more documentation from [Vlad Filippov]
1747 ### Changed
1749 - Update Cargo.lock with new dependencies for building
1751 - Update for protocol updates that flatten commands
1753 - Update to new protocol error handling
1755 - Update for Marionette protocol version 3 changes
1757 - Strip any leading and trailing `{}` from the `sessionId` Marionette
1758   returns
1760 - Update dependencies
1762 ### Fixed
1764 - Fix `GetCSSValue` message to send correct key `propertyName`
1766 - Fix example in documentation from @vladikoff
1768 ## 0.3.0 (2015-08-17)
1770 ### Added
1772 - Add support for finding elements in subtrees
1774 ## 0.2.0 (2015-05-20)
1776 ### Added
1778 - Extra debug messages
1780 - Add ability to set WebDriver port
1782 - Add support for getting the active element
1784 - Add support for `GetCookies` and `DeleteCookie`/`DeleteCookies`
1786 - Add preferences that switch off certain features not required for
1787   WebDriver tests
1789 ### Changed
1791 - Make failing to communicate with Firefox a fatal error that closes
1792   the session
1794 - Shut down session only when losing connection
1796 - Better handling of missing command line flags
1798 - Poll for connection every 100ms rather than every 100s
1800 - Switch to string-based error codes
1802 - Switch webdriver-rust library dependency to be pulled from git
1804 - Update dependencies
1806 ### Fixed
1808 - Handle null id for switching to frame more correctly
1810 ## 0.1.0 (2015-04-09)
1812 ### Added
1814 - Add proxy for converting WebDriver HTTP protocol to Marionette protocol
1816 - Add endpoints for modal dialogue support
1818 - Allow connecting to a running Firefox instance
1820 - Add explicit Cargo.lock file
1822 - Start Firefox when we get a [NewSession] command
1824 - Add flag parsing and address parsing
1826 - Add basic error handling
1828 ### Changed
1830 - Update for Rust beta
1832 - Switch to new IO libraries
1834 - Pin webdriver-rust commit so we can upgrade rustc versions independently
1836 - Set preferences when starting Firefox
1838 - Improve some error messages
1840 - Re-enable environment variable based logging
1842 ### Fixed
1844 - Fix Get Element Rect command to return floats instead of integers
1846 - Fix passing of web elements to [Switch To Frame] command
1848 - Fix serialisation of script commands
1850 - Fix assorted bugs found by the Selenium test suite
1852 - Fix conversion of Find Element/Find Elements responses from Marionette
1853   to WebDriver
1855 - Fixed build by updating Cargo.lock with new dependencies for building
1857 - Squash compile warnings
1859 [README]: https://github.com/mozilla/geckodriver/blob/master/README.md
1860 [crash reports]: <https://firefox-source-docs.mozilla.org/testing/geckodriver/CrashReports.html>
1861 [usage documentation]: <https://firefox-source-docs.mozilla.org/testing/geckodriver/Usage.html#Running-Firefox-in-an-container-based-package>
1862 [Browser Toolbox]: https://developer.mozilla.org/en-US/docs/Tools/Browser_Toolbox
1863 [WebDriver conformance]: https://wpt.fyi/results/webdriver/tests?label=experimental
1864 [`webSocketUrl`]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/webSocketUrl
1865 [`moz:firefoxOptions`]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions
1866 [`moz:debuggerAddress`]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html#moz-debuggeraddress
1867 [Microsoft Visual Studio redistributable runtime]: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
1868 [GeckoView]: https://wiki.mozilla.org/Mobile/GeckoView
1869 [Fission]: https://wiki.mozilla.org/Project_Fission
1870 [Capabilities]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html
1871 [Flags]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html
1872 [`--allow-hosts`]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html#code-allow-hosts-var-allow-hosts-var-code
1873 [`--allow-origins`]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html#code-allow-origins-var-allow-origins-var-code
1874 [enable remote debugging on the Android device]: https://developers.google.com/web/tools/chrome-devtools/remote-debugging
1875 [macOS notarization]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Notarization.html
1876 [Rust]: https://rustup.rs/
1877 [mozilla.org] https://www.mozilla.org/firefox/
1879 [`CloseWindowResponse`]: https://docs.rs/webdriver/newest/webdriver/response/struct.CloseWindowResponse.html
1880 [`CookieResponse`]: https://docs.rs/webdriver/newest/webdriver/response/struct.CookieResponse.html
1881 [`DeleteSession`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.DeleteSession
1882 [`ElementClickIntercepted`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.ElementClickIntercepted
1883 [`ElementNotInteractable`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.ElementNotInteractable
1884 [`FullscreenWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.FullscreenWindow
1885 [`GetNamedCookie`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.GetNamedCookie
1886 [`GetWindowRect`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.GetWindowRect
1887 [`InvalidCoordinates`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.InvalidCoordinates
1888 [`MaximizeWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.MaximizeWindow
1889 [`MinimizeWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.MinimizeWindow
1890 [`NewSession`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.NewSession
1891 [`NoSuchCookie`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.NoSuchCookie
1892 [`RectResponse`]: https://docs.rs/webdriver/0.27.0/webdriver/response/struct.RectResponse.html
1893 [`SendKeysParameters`]: https://docs.rs/webdriver/newest/webdriver/command/struct.SendKeysParameters.html
1894 [`SessionNotCreated`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.SessionNotCreated
1895 [`SetTimeouts`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.SetTimeouts
1896 [`SetWindowRect`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.SetWindowRect
1897 [`StaleElementReference`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.StaleElementReference
1898 [`UnableToCaptureScreen`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnableToCaptureScreen
1899 [`UnknownCommand`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnknownCommand
1900 [`UnknownError`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnknownError
1901 [`WindowRectParameters`]: https://docs.rs/webdriver/newest/webdriver/command/struct.WindowRectParameters.html
1903 [Add Cookie]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Commands/AddCookie
1904 [invalid argument]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/InvalidArgument
1905 [invalid session id]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/InvalidSessionID
1906 [script timeout]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/ScriptTimeout
1907 [timeout]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/Timeout
1908 [timeout object]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Timeouts
1909 [`platformName` capability]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities#platformName
1911 [hyper]: https://hyper.rs/
1912 [mozrunner crate]: https://crates.io/crates/mozrunner
1913 [serde]: https://serde.rs/
1914 [webdriver crate]: https://crates.io/crates/webdriver
1916 [Actions]: https://w3c.github.io/webdriver/webdriver-spec.html#actions
1917 [Element Click]: https://w3c.github.io/webdriver/webdriver-spec.html#element-click
1918 [Find Element From Shadow Root]: https://w3c.github.io/webdriver/#dfn-find-element-from-shadow-root
1919 [Find Elements From Shadow Root]: https://w3c.github.io/webdriver/#dfn-find-elements-from-shadow-root
1920 [Get Computed Label]: https://w3c.github.io/webdriver/#get-computed-label
1921 [Get Computed Role]: https://w3c.github.io/webdriver/#get-computed-role
1922 [Get Element Shadow Root]: https://w3c.github.io/webdriver/#get-element-shadow-root
1923 [Get Timeouts]: https://w3c.github.io/webdriver/webdriver-spec.html#get-timeouts
1924 [Get Window Rect]: https://w3c.github.io/webdriver/webdriver-spec.html#get-window-rect
1925 [insecure certificate]: https://w3c.github.io/webdriver/webdriver-spec.html#dfn-insecure-certificate
1926 [Minimize Window]: https://w3c.github.io/webdriver/webdriver-spec.html#minimize-window
1927 [New Session]: https://w3c.github.io/webdriver/webdriver-spec.html#new-session
1928 [New Window]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Commands/New_Window
1929 [Print]: https://w3c.github.io/webdriver/webdriver-spec.html#print
1930 [Send Alert Text]: https://w3c.github.io/webdriver/webdriver-spec.html#send-alert-text
1931 [Set Timeouts]: https://w3c.github.io/webdriver/webdriver-spec.html#set-timeouts
1932 [Set Window Rect]: https://w3c.github.io/webdriver/webdriver-spec.html#set-window-rect
1933 [Status]: https://w3c.github.io/webdriver/webdriver-spec.html#status
1934 [Switch to Frame]: https://w3c.github.io/webdriver/#dfn-switch-to-frame
1935 [Take Element Screenshot]: https://w3c.github.io/webdriver/webdriver-spec.html#take-element-screenshot
1936 [User Prompt Handler]: https://w3c.github.io/webdriver/#user-prompt-handler
1937 [WebDriver errors]: https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors
1939 [WebDriver BiDi]: https://w3c.github.io/webdriver-bidi/
1941 [Permissions]: https://www.w3.org/TR/permissions/#automation-webdriver-bidi
1943 [Virtual Authenticators]: https://www.w3.org/TR/webauthn-2/#sctn-automation
1944 [Add Credential]: https://www.w3.org/TR/webauthn-2/#add-credential
1945 [Add Virtual Authenticator]: https://www.w3.org/TR/webauthn-2/#add-virtual-authenticator
1946 [Get Credentials]: https://www.w3.org/TR/webauthn-2/#get-credentials
1947 [Remove All Credentials]: https://www.w3.org/TR/webauthn-2/#remove-all-credentials
1948 [Remove Credential]: https://www.w3.org/TR/webauthn-2/#remove-credential
1949 [Remove Virtual Authenticator]: https://www.w3.org/TR/webauthn-2/#remove-virtual-authenticator
1950 [Set User Verified]: https://www.w3.org/TR/webauthn-2/#set-user-verified
1952 [Bastien Orivel]: https://github.com/Eijebong
1953 [David Burns]: https://github.com/AutomatedTester
1954 [James Hendry]: https://bugzilla.mozilla.org/user_profile?user_id=720249
1955 [Jason Juang]: https://github.com/juangj
1956 [Jeremy Lempereur]: https://github.com/o0Ignition0o
1957 [Kalpesh Krishna]: https://github.com/martiansideofthemoon
1958 [Kriti Singh]: https://github.com/kritisingh1
1959 [Mitesh Gulecha]: https://github.com/mickyg03
1960 [Mike Pennisi]: https://github.com/jugglinmike
1961 [Nupur Baghel]: https://github.com/nupurbaghel
1962 [Peter Major]: https://github.com/aldaris
1963 [Razvan Cojocaru]: https://github.com/rzvncj
1964 [Shivam Singhal]: https://github.com/championshuttler
1965 [Sven Jost]: https://github/mythsunwind
1966 [Vlad Filippov]: https://github.com/vladikoff
1967 [Olivier Tilloy]: https://github.com/oSoMoN