1Change log
2==========
3
4All notable changes to this program are documented in this file.
5
60.29.1  (2021-04-09), `970ef713fe58`)
7-------------------------------------
8
9### Known problems
10
11- _macOS 10.15 (Catalina):_
12
13  Due to the requirement from Apple that all programs must be
14  notarized, geckodriver will not work on Catalina if you manually
15  download it through another notarized program, such as Firefox.
16
17  Whilst we are working on a repackaging fix for this problem, you can
18  find more details on how to work around this issue in the [macOS
19  notarization] section of the documentation.
20
21- _Android:_
22
23  Marionette will only be enabled in GeckoView based applications when the
24  Firefox preference `devtools.debugger.remote-enabled` is set to `True` via
25  [`moz:firefoxOptions`]. This will be fixed in the Firefox 90 release for
26  Android.
27
28### Added
29
30- When testing GeckoView based applications on Android it's now enough to
31  specify the `androidPackage` capability. The appropriate activity name,
32  and required intent arguments will now automatically be used for
33  applications released by Mozilla.
34
35- Native AArch64 (M1) builds of geckodriver for MacOS are now available. These
36  are currently shipped as Tier2 due to missing test infrastructure. Please let
37  us know if you experience issues.
38
39### Fixed
40
41- Fixed a stack overflow crash in thread 'webdriver dispatcher' when
42  handling certain device errors.
43
44- Fixed an application crash due to missing permissions on unrooted devices
45  by changing the location of the test related files, e.g the profile folder.
46  Therefore the deprecated --android-storage command line argument
47  now defaults to the `sdcard` option, which changed its location to
48  `$EXTERNAL_STORAGE/Android/data/%androidPackage%/files/`. With this change
49  proper support for unrooted devices running Android 10+ has been added.
50
51  _Note_: Do not use the --android-storage command line argument
52  anymore unless there is a strong reason. It will be removed in a future
53  release.
54
55
560.29.0  (2021-01-14, `cf6956a5ec8e`)
57------------------------------------
58
59### Known problems
60
61- _macOS 10.15 (Catalina):_
62
63  Due to the requirement from Apple that all programs must be
64  notarized, geckodriver will not work on Catalina if you manually
65  download it through another notarized program, such as Firefox.
66
67  Whilst we are working on a repackaging fix for this problem, you can
68  find more details on how to work around this issue in the [macOS
69  notarization] section of the documentation.
70
71- _Android:_
72
73  Marionette will only be enabled in GeckoView based applications when the
74  Firefox preference `devtools.debugger.remote-enabled` is set to `True` via
75  [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
76  for Android releases.
77
78  In some cases geckodriver could crash due to a stack overflow when handling
79  certain device errors.
80
81  On unrooted Android 10+ devices startup crashes of the application can be
82  experienced due to an inappropriate location of test related files, e.g the
83  profile folder.
84
85### Added
86
87- Introduced the new boolean capability `moz:debuggerAddress` that can be used
88  to opt-in to the experimental Chrome DevTools Protocol (CDP) implementation.
89  A string capability with the same name will be returned by [`NewSession`],
90  which contains the `host:port` combination of the HTTP server that can be
91  used to query for websockets of available targets.
92
93  Note: For this experimental feature the site-isolation support of
94  Firefox aka [Fission] will be not available.
95
960.28.0  (2020-11-03, `c00d2b6acd3f`)
97------------------------------------
98
99### Known problems
100
101- _macOS 10.15 (Catalina):_
102
103  Due to the requirement from Apple that all programs must be
104  notarized, geckodriver will not work on Catalina if you manually
105  download it through another notarized program, such as Firefox.
106
107  Whilst we are working on a repackaging fix for this problem, you can
108  find more details on how to work around this issue in the [macOS
109  notarization] section of the documentation.
110
111- _Android:_
112
113  Marionette will only be enabled in GeckoView based applications when the
114  Firefox preference `devtools.debugger.remote-enabled` is set to `True` via
115  [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
116  for Android releases.
117
118  In some cases geckodriver could crash due to a stack overflow when handling
119  certain device errors.
120
121  On unrooted Android 10+ devices startup crashes of the application can be
122  experienced due to an inappropriate location of test related files, e.g the
123  profile folder.
124
125### Added
126
127- The command line flag `--android-storage` has been added, to allow geckodriver
128  to also control Firefox on root-less Android devices.
129  See the [documentation][Flags] for available values.
130
131### Fixed
132
133- Firefox can be started again via a shell script that is located outside of the
134  Firefox directory on Linux.
135
136- If Firefox cannot be started by geckodriver the real underlying error message is
137  now being reported.
138
139- Version numbers for minor and extended support releases of Firefox are now parsed correctly.
140
141### Removed
142
143- Since Firefox 72 extension commands for finding an element’s anonymous children
144  and querying its attributes are no longer needed, and have been removed.
145
1460.27.0  (2020-07-27, `7b8c4f32cdde`)
147------------------------------------
148
149### Security Fixes
150
151- CVE-2020-15660
152
153  - Added additional checks on the `Content-Type` header for `POST`
154    requests to disallow `application/x-www-form-urlencoded`,
155    `multipart/form-data` and `text/plain`.
156
157  - Added checking of the `Origin` header for `POST` requests.
158
159  - The version number of Firefox is now checked when establishing a session.
160
161### Known problems
162
163- _macOS 10.15 (Catalina):_
164
165  Due to the requirement from Apple that all programs must be
166  notarized, geckodriver will not work on Catalina if you manually
167  download it through another notarized program, such as Firefox.
168
169  Whilst we are working on a repackaging fix for this problem, you can
170  find more details on how to work around this issue in the [macOS
171  notarization] section of the documentation.
172
173- _Android:_
174
175  Marionette will only be enabled in GeckoView based applications when the
176  Firefox preference `devtools.debugger.remote-enabled` is set to `True` via
177  [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
178  for Android releases.
179
180  In some cases geckodriver could crash due to a stack overflow when handling
181  certain device errors.
182
183### Added
184
185- To set environment variables for the launched Firefox for Android,
186  it is now possible to add an `env` object on [`moz:firefoxOptions`]
187  (note: this is not supported for Firefox Desktop)
188
189- Support for print-to-PDF
190
191  The newly standardised WebDriver [Print] endpoint provides a way to
192  render pages to a paginated PDF representation. This endpoint is
193  supported by geckodriver when using Firefox version ≥78.
194
195- Support for same-site cookies
196
197  Cookies can now be set with a `same-site` parameter, and the value
198  of that parameter will be returned when cookies are
199  retrieved. Requires Firefox version ≥79. Thanks to [Peter Major] for
200  the patch.
201
202### Fixed
203
204- _Android:_
205
206  * Firefox running on Android devices can now be controlled from a Windows host.
207
208  * Setups with multiple connected Android devices are now supported.
209
210  * Improved cleanup of configuration files. This prevents crashes if
211    the application is started manually after launching it through
212    geckodriver.
213
214- Windows and Linux binaries are again statically linked.
215
2160.26.0  (2019-10-12, `e9783a644016'`)
217-------------------------------------
218
219Note that with this release the minimum recommended Firefox version
220has changed to Firefox ≥60.
221
222### Known problems
223
224- _macOS 10.15 (Catalina):_
225
226  Due to the recent requirement from Apple that all programs must
227  be notarized, geckodriver will not work on Catalina if you manually
228  download it through another notarized program, such as Firefox.
229
230  Whilst we are working on a repackaging fix for this problem, you
231  can find more details on how to work around this issue in the
232  [macOS notarization] section of the documentation.
233
234- _Windows:_
235
236  You must still have the [Microsoft Visual Studio redistributable
237  runtime] installed on your system for the binary to run.  This
238  is a known bug which we weren't able fix for this release.
239
240- _Android:_
241
242  Marionette will only be enabled in GeckoView based applications when the
243  Firefox preference `devtools.debugger.remote-enabled` is set to `True` via
244  [`moz:firefoxOptions`]. This will be fixed in one of the upcoming Firefox
245  for Android releases.
246
247  In some cases geckodriver could crash due to a stack overflow when handling
248  certain device errors.
249
250### Added
251
252- Support for Firefox on Android
253
254  Starting with this release geckodriver is able to connect to
255  Firefox on Android systems, and to control packages based on
256  [GeckoView].
257
258  Support for Android works by the geckodriver process running on
259  a host system and Firefox running within either an emulator or
260  on a physical device connected to the host system.  This requires
261  you to first [enable remote debugging on the Android device].
262
263  The WebDriver client must set the [`platformName` capability] to
264  "`android`" and the `androidPackage` capability within
265  [`moz:firefoxOptions`] to the Android package name of the Firefox
266  application.
267
268  The full list of new capabilities specific to Android, instructions
269  how to use them, and examples can be found in the [`moz:firefoxOptions`]
270  documentation on MDN.
271
272  When the session is created, the `platformName` capability will
273  return "`android`" instead of reporting the platform of the host
274  system.
275
276### Changed
277
278- Continued Marionette refactoring changes
279
280  0.25.0 came with a series of internal changes for how geckodriver
281  communicates with Firefox over the Marionette protocol.  This
282  release contains the second half of the refactoring work.
283
284### Fixed
285
286- Connection attempts to Firefox made more reliable
287
288  geckodriver now waits for the Marionette handshake before assuming
289  the session has been established.  This should improve reliability
290  in creating new WebDriver sessions.
291
292- Corrected error codes used during session creation
293
294  When a new session was being configured with invalid input data,
295  the error codes returned was not always consistent.  Attempting
296  to start a session with a malformed capabilities configuration
297  will now return the [`invalid argument`] error consistently.
298
299
3000.25.0 (2019-09-09, `bdb64cf16b68`)
301-----------------------------------
302
303__Note to Windows users!__
304With this release you must have the [Microsoft Visual Studio redistributable runtime]
305installed on your system for the binary to run.
306This is a [known bug](https://github.com/mozilla/geckodriver/issues/1617)
307with this particular release that we intend to release a fix for soon.
308
309### Added
310
311- Added support for HTTP `HEAD` requests to the HTTPD
312
313  geckodriver now responds correctly to HTTP `HEAD` requests,
314  which can be used for probing whether it supports a particular API.
315
316  Thanks to [Bastien Orivel] for this patch.
317
318- Added support for searching for Nightly’s default path on macOS
319
320  If the location of the Firefox binary is not given, geckodriver
321  will from now also look for the location of Firefox Nightly in
322  the default locations.  The ordered list of search paths on macOS
323  is as follows:
324
325    1. `/Applications/Firefox.app/Contents/MacOS/firefox-bin`
326    2. `$HOME/Applications/Firefox.app/Contents/MacOS/firefox-bin`
327    3. `/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin`
328    4. `$HOME/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin`
329
330  Thanks to [Kriti Singh] for this patch.
331
332- Support for application bundle paths on macOS
333
334  It is now possible to pass an application bundle path, such as
335  `/Applications/Firefox.app` as argument to the `binary` field in
336  [`moz:firefoxOptions`].  This will be automatically resolved to
337  the absolute path of the binary when Firefox is started.
338
339  Thanks to [Nupur Baghel] for this patch.
340
341- macOS and Windows builds are signed
342
343  With this release of geckodriver, executables for macOS and Windows
344  are signed using the same certificate key as Firefox.  This should
345  help in cases where geckodriver previously got misidentified as
346  a virus by antivirus software.
347
348### Removed
349
350- Dropped support for legacy Selenium web element references
351
352  The legacy way of serialising web elements, using `{"ELEMENT": <UUID>}`,
353  has been removed in this release.  This may break older Selenium
354  clients and clients which are otherwise not compatible with the
355  WebDriver standard.
356
357  Thanks to [Shivam Singhal] for this patch.
358
359- Removed `--webdriver-port` command-line option
360
361  `--webdriver-port <PORT>` was an undocumented alias for `--port`,
362  initially used for backwards compatibility with clients
363  prior to Selenium 3.0.0.
364
365### Changed
366
367- Refactored Marionette serialisation
368
369  Much of geckodriver’s internal plumbing for serialising WebDriver
370  requests to Marionette messages has been refactored to decrease
371  the amount of manual lifting.
372
373  This work should have no visible side-effects for users.
374
375  Thanks to [Nupur Baghel] for working on this throughout her
376  Outreachy internship at Mozilla.
377
378- Improved error messages for incorrect command-line usage
379
380### Fixed
381
382- Errors related to incorrect command-line usage no longer hidden
383
384  By mistake, earlier versions of geckodriver failed to print incorrect
385  flag use.  With this release problems are again written to stderr.
386
387- Search system path for Firefox binary on BSDs
388
389  geckodriver would previously only search the system path for the
390  `firefox` binary on Linux.  Now it supports different BSD flavours
391  as well.
392
393
3940.24.0 (2019-01-28, `917474f3473e`)
395-----------------------------------
396
397### Added
398
399- Introduces `strictFileInteractability` capability
400
401  The new capability indicates if strict interactability checks
402  should be applied to `<input type=file>` elements.  As strict
403  interactability checks are off by default, there is a change
404  in behaviour when using [Element Send Keys] with hidden file
405  upload controls.
406
407- Added new endpoint `GET /session/{session id}/moz/screenshot/full`
408  for taking full document screenshots, thanks to Greg Fraley.
409
410- Added new `--marionette-host <hostname>` flag for binding to a
411  particular interface/IP layer on the system.
412
413- Added new endpoint `POST /session/{session_id}/window/new`
414  for the [New Window] command to create a new top-level browsing
415  context, which can be either a window or a tab. The first version
416  of Firefox supporting this command is Firefox 66.0.
417
418- When using the preference `devtools.console.stdout.content` set to
419  `true` logging of console API calls like `info()`, `warn()`, and
420  `error()` can be routed to stdout.
421
422- geckodriver now sets the `app.update.disabledForTesting` preference
423  to prevent Firefox >= 65 from automatically updating whilst under
424  automation.
425
426### Removed
427
428- ARMv7 HF builds have been discontinued
429
430  We [announced](https://lists.mozilla.org/pipermail/tools-marionette/2018-September/000035.html)
431  back in September 2018 that we would stop building for ARM,
432  but builds can be self-serviced by building from source.
433
434  To cross-compile from another host system, you can use this command:
435
436  	% cargo build --target armv7-unknown-linux-gnueabihf
437
438### Changed
439
440- Allow file uploads to hidden `<input type=file>` elements
441
442  Through a series of changes to the WebDriver specification,
443  geckodriver is now aligned with chromedriver’s behaviour that
444  allows interaction with hidden `<input type=file>` elements.
445
446  This allows WebDriver to be used with various popular web
447  frameworks that—through indirection—hides the file upload control
448  and invokes it through other means.
449
450- Allow use of an indefinite script timeout for the [Set Timeouts]
451  command, thanks to reimu.
452
453### Fixed
454
455- Corrected `Content-Type` of response header to `utf-8` to fix
456  an HTTP/1.1 compatibility bug.
457
458- Relaxed the deserialization of timeouts parameters to allow unknown
459  fields for the [Set Timeouts] command.
460
461- Fixed a regression in the [Take Element Screenshot] to not screenshot
462  the viewport, but the requested element.
463
464
4650.23.0 (2018-10-03)
466-------------------
467
468This release contains a number of fixes for regressions introduced
469in 0.22.0, where we shipped a significant refactoring to the way
470geckodriver internally dealt with JSON serialisation.
471
472### Removed
473
474- The POST `/session/{session id}/element/{element id}/tap` endpoint
475  was removed, thanks to Kerem Kat.
476
477### Changed
478
479- [webdriver crate] upgraded to 0.38.0.
480
481### Fixed
482
483- `desiredCapabilities` and `requiredCapabilities` are again
484  recognised on session creation
485
486  A regression in 0.22.0 caused geckodriver to recognise `desired`
487  and `required` instead of the correct `desiredCapabilities`
488  and `requiredCapabilities`.  This will have caused significant
489  problems for users who relied on this legacy Selenium-style
490  session creation pattern.
491
492  Do however note that support for Selenium-styled new session
493  requests is temporary and that this will be removed sometime
494  before the 1.0 release.
495
496- `duration` field made optional on pause actions
497
498  A regression in 0.22.0 caused the pause action primitive to
499  require a `duration` field.  This has now been fixed so that
500  pauses in action chains can be achieved with the default duration.
501
502- Log level formatted to expected Marionette input
503
504  A regression in 0.22.0 caused the log level to be improperly
505  formatted when using Firefox pre-releases.  This is now fixed so
506  that the requested log level is correctly interpreted by Marionette.
507
508- `temporary` field on addon installation made optional
509
510  A regression in 0.22.0 caused the `temporary` field for POST
511  `/session/{session id}/moz/addon/install` to be mandatory.  This has
512  now been fixed so that an addon is installed permanently by default.
513
514- SHA1s in version information uses limited number of characters
515
516  The SHA1 used in `--version` when building geckodriver from a
517  git repository is now limited to 12 characters, as it is when
518  building from an hg checkout.  This ensures reproducible builds.
519
520
5210.22.0 (2018-09-15)
522-------------------
523
524This release marks an important milestone on the path towards
525a stable release of geckodriver.  Large portions of geckodriver
526and the [webdriver] library it is based on has been refactored to
527accommodate using [serde] for JSON serialization.
528
529We have also made great strides to improving [WebDriver conformance],
530to the extent that geckodriver is now _almost_ entirely conforming
531to the standard.
532
533### Added
534
535- Support for WebDriver web element-, web frame-, and web window
536  identifiers from Firefox.
537
538- Added support for the non-configurable `setWindowRect` capability
539  from WebDriver.
540
541  This capability informs whether the attached browser supports
542  manipulating the window dimensions and position.
543
544- A new extension capability `moz:geckodriverVersion` is returned
545  upon session creation.
546
547### Changed
548
549- All JSON serialization and deserialisation has moved from
550  rustc_serialize to [serde].
551
552- The HTTP status codes used for [script timeout] and [timeout]
553  errors has changed from Request Timeout (408) to Internal Server
554  Error (500) in order to not break HTTP/1.1 `Keep-Alive` support,
555  as HTTP clients interpret the old status code to mean they should
556  duplicate the request.
557
558- The HTTP/1.1 `Keep-Alive` timeout for persistent connections  has
559  been increased to 90 seconds.
560
561- An [invalid session ID] error is now returned when there is no
562  active session.
563
564- An [invalid argument] error is now returned when [Add Cookie]
565  is given invalid parameters.
566
567- The handshake when geckodriver connects to Marionette has been
568  hardened by killing the Firefox process if it fails.
569
570- The handshake read timeout has been reduced to 10 seconds instead
571  of waiting forever.
572
573- The HTTP server geckodriver uses, [hyper], has been upgraded to
574  version 0.12, thanks to [Bastien Orivel].
575
576- geckodriver version number is no longer logged on startup, as
577  the log level is not configured until a session is created.
578
579  The version number is available through `--version`, and now
580  also through a new `moz:geckodriverVersion` field in the matched
581  capabilities.
582
583- [webdriver crate] upgraded to 0.37.0.
584
585### Fixed
586
587- Parsing [timeout object] values has been made WebDriver conforming,
588  by allowing floats as input.
589
590- Implicit downloads of OpenH264 and Widevine plugins has been disabled.
591
592- The commit hash and date displayed when invoking `--version`
593  is now well-formatted when built from an hg repository, thanks to
594  [Jeremy Lempereur].
595
596- Many documentation improvements, now published on
597  https://firefox-source-docs.mozilla.org/testing/geckodriver/.
598
599
6000.21.0 (2018-06-15)
601-------------------
602
603Note that with this release of geckodriver the minimum recommended
604Firefox and Selenium versions have changed:
605
606  - Firefox 57 (and greater)
607  - Selenium 3.11 (and greater)
608
609### Added
610
611- Support for the chrome element identifier from Firefox.
612
613- The `unhandledPromptBehavior` capability now accepts `accept and
614  notify`, `dismiss and notify`, and `ignore` options.
615
616  Note that the unhandled prompt handler is not fully supported in
617  Firefox at the time of writing.
618
619### Changed
620
621- Firefox will now be started with the `-foreground` and `-no-remote`
622  flags if they have not already been specified by the user in
623  [`moz:firefoxOptions`].
624
625  `-foreground` will ensure the application window gets focus when
626  Firefox is started, and `-no-remote` will prevent remote commands
627  to this instance of Firefox and also ensure we always start a new
628  instance.
629
630- WebDriver commands that do not have a return value now correctly
631  return `{value: null}` instead of an empty dictionary.
632
633- The HTTP server now accepts `Keep-Alive` connections.
634
635- Firefox remote protocol command mappings updated.
636
637  All Marionette commands changed to make use of the `WebDriver:`
638  prefixes introduced with Firefox 56.
639
640- Overhaul of Firefox preferences.
641
642  Already deprecated preferences in Firefox versions earlier than
643  57 got removed.
644
645- [webdriver crate] upgraded to 0.36.0.
646
647### Fixed
648
649- Force use of IPv4 network stack.
650
651  On certain system configurations, where `localhost` resolves to
652  an IPv6 address, geckodriver would attempt to connect to Firefox
653  on the wrong IP stack, causing the connection attempt to time out
654  after 60 seconds.  We now ensure that geckodriver uses IPv4
655  consistently to both connect to Firefox and for allocating a free
656  port.
657
658- geckodriver failed to locate the correct Firefox binary if it was
659  found under a _firefox_ or _firefox-bin_ directory, depending on
660  the system, because it thought the parent directory was the
661  executable.
662
663- On Unix systems (macOS, Linux), geckodriver falsely reported
664  non-executable files as valid binaries.
665
666- When stdout and stderr is redirected by geckodriver, a bug prevented
667  the redirections from taking effect.
668
669
6700.20.1 (2018-04-06)
671-------------------
672
673### Fixed
674
675- Avoid attempting to kill Firefox process that has stopped.
676
677  With the change to allow Firefox enough time to shut down in
678  0.20.0, geckodriver started unconditionally killing the process
679  to reap its exit status.  This caused geckodriver to inaccurately
680  report a successful Firefox shutdown as a failure.
681
682  The regression should not have caused any functional problems, but
683  the termination cause and the exit status are now reported correctly.
684
685
6860.20.0 (2018-03-08)
687-------------------
688
689### Added
690
691- New `--jsdebugger` flag to open the [Browser Toolbox] when Firefox
692  launches.  This is useful for debugging Marionette internals.
693
694- Introduced the temporary, boolean capability
695  `moz:useNonSpecCompliantPointerOrigin` to disable the WebDriver
696  conforming behavior of calculating the Pointer Origin.
697
698### Changed
699
700- HTTP status code for the [`StaleElementReference`] error changed
701  from 400 (Bad Request) to 404 (Not Found).
702
703- Backtraces from geckodriver no longer substitute for missing
704  Marionette stacktraces.
705
706- [webdriver crate] upgraded to 0.35.0.
707
708### Fixed
709
710- The Firefox process is now given ample time to shut down, allowing
711  enough time for the Firefox shutdown hang monitor to kick in.
712
713  Firefox has an integrated background monitor that observes
714  long-running threads during shutdown.  These threads will be
715  killed after 63 seconds in the event of a hang.  To allow Firefox
716  to shut down these threads on its own, geckodriver has to wait
717  that time and some additional seconds.
718
719- Grapheme clusters are now accepted as input for keyboard input
720  to actions.
721
722  Input to the `value` field of the `keyDown` and `keyUp` action
723  primitives used to only accept single characters, which means
724  geckodriver would error when a valid grapheme cluster was sent in,
725  for example with the tamil nadu character U+0BA8 U+0BBF.
726
727  Thanks to Greg Fraley for fixing this bug.
728
729- Improved error messages for malformed capability values.
730
731
7320.19.1 (2017-10-30)
733-------------------
734
735### Changed
736
737- Search suggestions in the location bar turned off as not to
738  trigger network connections
739
740- Block addons incompatible with E10s
741
742### Fixed
743
744- Marionette stacktraces are now correctly propagated
745
746- Some error messages have been clarified
747
748### Removed
749
750- Removed obsolete `socksUsername` and `socksPassword` proxy
751  configuration keys because neither were picked up or recognised
752
753
7540.19.0 (2017-09-16)
755-------------------
756
757Note that with geckodriver 0.19.0 the following versions are recommended:
758- Firefox 55.0 (and greater)
759- Selenium 3.5 (and greater)
760
761### Added
762
763- Added endpoint:
764  - POST `/session/{session id}/window/minimize` for the [Minimize Window]
765    command
766
767- Added preference `extensions.shield-recipe-client.api_url` to disable
768  shield studies which could unexpectedly change the behavior of Firefox
769
770- Introduced the temporary, boolean capability `moz:webdriverClick` to
771  enable the WebDriver conforming behavior of the [Element Click] command
772
773- Added crashreporter environment variables to better control the browser
774  in case of crashes
775
776- Added preference `dom.file.createInChild` set to true to allow file
777  object creation in content processes
778
779### Changed
780
781- Log all used application arguments and not only `-marionette`
782
783- Early abort connection attempts to Marionette if the Firefox process
784  closed unexpectetly
785
786- Removed deprecated `socksProxyVersion` in favor of `socksVersion`
787
788- Removed `ftpProxyPort`, `httpProxyPort`, `sslProxyPort`, and
789  `socksProxyPort` because _ports_ have to be set for `ftpProxy`,
790  `httpProxy`, `sslProxy`, and `socksProxy` using ":<PORT>"
791
792- The `proxyType` `noproxy` has been replaced with `direct` in accordance
793  with recent WebDriver specification changes
794
795- The [`WindowRectParameters`] have been updated to return signed 32-bit
796  integers in accordance with the CSS and WebDriver specifications, and
797  to be more liberal with the input types
798
799- Mapped the [`FullscreenWindow`] to the correct Marionette command
800
801- To make sure no browser process is left behind when the [`NewSession`]
802  fails, the process is closed immediately now
803
804- `/moz/addon/install` command accepts an `addon` parameter, in lieu of
805  `path`, containing an addon as a Base64 string (fixed by [Jason Juang])
806
807- [webdriver crate] upgraded to version 0.31.0
808
809- [mozrunner crate] upgraded to version 0.5.0
810
811### Removed
812
813- Removed the following obsolete preferences for Firefox:
814  - `browser.safebrowsing.enabled`
815  - `browser.safebrowsing.forbiddenURIs.enabled`
816  - `marionette.defaultPrefs.port`
817  - `marionette.logging`
818
819
8200.18.0 (2017-07-10)
821-------------------
822
823### Changed
824
825- [`RectResponse`] permits returning floats for `width` and `height`
826  fields
827
828- New type [`CookieResponse`] for the [`GetNamedCookie`] command returns
829  a single cookie, as opposed to an array of a single cookie
830
831- To pick up a prepared profile from the filesystem, it is now possible
832  to pass `["-profile", "/path/to/profile"]` in the `args` array on
833  [`moz:firefoxOptions`]
834
835- geckodriver now recommends Firefox 53 and greater
836
837- Version information (`--version`) contains the hash from from the
838  commit used to build geckodriver
839
840- geckodriver version logged on startup
841
842- [webdriver crate] upgraded to version 0.27.0
843
844- [mozrunner crate] upgraded to version 0.4.1
845
846### Fixed
847
848- The [`SetTimeouts`] command maps to the Marionette `setTimeouts`
849  command, which makes geckodriver compatible with Firefox 56 and greater
850
851- Linux x86 (i686-unknown-linux-musl) builds are fixed
852
853
8540.17.0 (2017-06-09)
855-------------------
856
857### Added
858
859- Added endpoints:
860  - POST `/session/{session id}/window/fullscreen` to invoke the window
861    manager-specific `full screen` operation
862  - POST `/session/{session id}/moz/addon/install` to install an extension
863    (Gecko only)
864  - POST `/session/{session id}/moz/addon/uninstall` to uninstall an
865    extension (Gecko only)
866
867### Changed
868
869- Increasing the length of the `network.http.phishy-userpass-length`
870  preference will cause Firefox to not prompt when navigating to a
871  website with a username or password in the URL
872
873- Library dependencies upgraded to mozrunner 0.4 and mozprofile 0.3
874  to allow overriding of preferences via capabilities if those have been
875  already set in the profile
876
877- Library dependencies upgraded to mozversion 0.1.2 to only use the
878  normalized path of the Firefox binary for version checks but not to
879  actually start the browser, which broke several components in Firefox
880  on Windows
881
882### Fixed
883
884- The [SetWindowRect] command now returns the [WindowRectResponse]
885  when it is done
886
887- Use ASCII versions of array symbols to properly display them in the
888  Windows command prompt
889
890- Use [`SessionNotCreated`] error instead of [`UnknownError`] if there
891  is no current session
892
893
8940.16.1 (2017-04-26)
895-------------------
896
897### Fixed
898
899- Read Firefox version number from stdout when failing
900  to look for the application .ini file (fixes [Selenium
901  #3884](https://github.com/SeleniumHQ/selenium/issues/3884))
902
903- Session is now ended when closing the last Firefox window (fixes
904  [#613](https://github.com/mozilla/geckodriver/issues/613))
905
906
9070.16.0 (2017-04-21)
908-------------------
909
910Note that geckodriver v0.16.0 is only compatible with Selenium 3.4
911and greater.
912
913### Added
914
915- Support for WebDriver-conforming [New Session] negotiation, with
916  `desiredCapabilities`/`requiredCapabilities` negotiation as fallback
917
918- Added two new endpoints:
919  - GET `/session/{session id}/window/rect` for [Get Window Rect]
920  - POST `/session/{session id}/window/rect` for [Set Window Rect]
921
922- Align errors with the [WebDriver errors]:
923  - Introduces new errors [`ElementClickIntercepted`],
924  [`ElementNotInteractable`], [`InvalidCoordinates`], [`NoSuchCookie`],
925  [`UnableToCaptureScreen`], and [`UnknownCommand`]
926  - Removes `ElementNotVisible` and `InvalidElementCoordinates` errors
927
928### Removed
929
930- Removed following list of unused endpoints:
931  - GET `/session/{session id}/alert_text`
932  - POST `/session/{session id}/alert_text`
933  - POST `/session/{session id}/accept_alert`
934  - POST `/session/{session id}/dismiss_alert`
935  - GET `/session/{session id}/window_handle`
936  - DELETE `/session/{session id}/window_handle`
937  - POST `/session/{session id}/execute_async`
938  - POST `/session/{session id}/execute`
939
940### Changed
941
942- [`SendKeysParameters`], which is used for the [Element Send Keys] and
943  [Send Alert Text] commands, has been updated to take a string `text`
944  field
945
946- [`CookieResponse`] and [`CloseWindowResponse`] fixed to be properly
947  wrapped in a `value` field, like other responses
948
949- Allow negative numbers for `x` and `y` fields in `pointerMove` action
950
951- Disable Flash and the plugin container in Firefox by
952  default, which should help mitigate the “Plugin Container
953  for Firefox has stopped working” problems [many users were
954  reporting](https://github.com/mozilla/geckodriver/issues/225) when
955  deleting a session
956
957- Preferences passed in a profile now take precedence over
958  set of default preferences defined by geckodriver (fixed by
959  [Marc Fisher](https://github.com/DrMarcII))
960  - The exceptions are the `marionette.port` and `marionette.log.level`
961    preferences and their fallbacks, which are set unconditionally and
962    cannot be overridden
963
964- Remove default preference that disables unsafe CPOW checks
965
966- WebDriver library updated to 0.25.2
967
968### Fixed
969
970- Fix for the “corrupt deflate stream” exception that
971  sometimes occurred when trying to write an empty profile by
972  [@kirhgoph](https://github.com/kirhgoph)
973
974- Recognise `sslProxy` and `sslProxyPort` entries in the proxy
975  configuration object (fixed by [Jason Juang])
976
977- Fix “`httpProxyPort` was not an integer” error (fixed by [Jason
978  Juang])
979
980- Fix broken unmarshaling of _Get Timeouts_ response format from Firefox
981  52 and earlier (fixed by [Jason Juang])
982
983- Allow preferences in [`moz:firefoxOptions`] to be both positive- and
984  negative integers (fixed by [Jason Juang])
985
986- Allow IPv6 hostnames in the proxy configuration object
987
988- i686-unknown-linux-musl (Linux 32-bit) build fixed
989
990- Log messages from other Rust modules are now ignored
991
992- Improved log messages to the HTTPD
993
994
9950.15.0 (2017-03-08)
996-------------------
997
998### Added
999
1000- Added routing and parsing for the [Get Timeouts] command
1001
1002### Changed
1003
1004- All HTTP responses are now wrapped in `{value: …}` objects per the
1005  WebDriver specification; this may likely require you to update your
1006  client library
1007
1008- Pointer move action’s `element` key changed to `origin`, which
1009  lets pointer actions originate within the context of the viewport,
1010  the pointer’s current position, or from an element
1011
1012- Now uses about:blank as the new tab document; this was previously
1013  disabled due to [bug 1333736](https://bugzil.la/1333736) in Marionette
1014
1015- WebDriver library updated to 0.23.0
1016
1017### Fixed
1018
1019- Aligned the data structure accepted by the [Set Timeouts] command with
1020  the WebDriver specification
1021
1022
10230.14.0 (2017-01-31)
1024-------------------
1025
1026### Changed
1027
1028- Firefox process is now terminated and session ended when the last
1029  window is closed
1030
1031- WebDriver library updated to version 0.20.0
1032
1033### Fixed
1034
1035- Stacktraces are now included when the error originates from within
1036  the Rust stack
1037
1038- HTTPD now returns correct response headers for `Content-Type` and
1039  `Cache-Control` thanks to [Mike Pennisi]
1040
1041
10420.13.0 (2017-01-06)
1043-------------------
1044
1045### Changed
1046
1047- When navigating to a document with an insecure- or otherwise invalid
1048  TLS certificate, an [insecure certificate] error will be returned
1049
1050- On macOS, deducing Firefox’ location on the system will look for
1051  _firefox-bin_ on the system path (`PATH` environmental variable) before
1052  looking in the applications folder
1053
1054- Window position coordinates are allowed to be negative numbers, to
1055  cater for maximised window positioning on Windows
1056
1057- WebDriver library updated to version 0.18.0
1058
1059### Fixed
1060
1061- Check for single-character key codes in action sequences now counts
1062  characters instead of bytes
1063
1064
10650.12.0 (2017-01-03)
1066-------------------
1067
1068### Added
1069
1070- Added [Take Element Screenshot] command
1071
1072- Added new [Status] command
1073
1074- Added routing for the [Get Timeouts] command, but it is not yet
1075  implemented in Marionette, and will return an _unsupported operation_
1076  error until it is
1077
1078- Implemented routing for [new actions API](Actions), but it too is not
1079  yet fully implemented in Marionette
1080
1081### Changed
1082
1083- [Synced Firefox
1084  preferences](https://github.com/mozilla/geckodriver/commit/2bfdc3ec8151c427a6a75a6ba3ad203459540495)
1085  with those used in Mozilla automation
1086
1087- Default log level for debug builds of Firefox, which used to be `DEBUG`,
1088  changed to `INFO`-level
1089
1090- WebDriver library dependency upgraded to 0.17.1
1091
1092- Using _session not created_ error when failing to start session
1093
1094- geckodriver will exit with exit code 69 to indicate that the port
1095  is unavailable
1096
1097### Fixed
1098
1099- Improved logging when starting Firefox
1100
1101- Reverted to synchronous logging, which should address cases of
1102  inconsistent output when failing to bind to port
1103
1104- Clarified in README that geckodriver is not supported on Windows XP
1105
1106- Added documentation of supported capabilities to [README]
1107
1108- Included capabilities example in the [README]
1109
1110
11110.11.1 (2016-10-10)
1112-------------------
1113
1114### Fixed
1115
1116- Version number in binary now reflects the release version
1117
1118
11190.11.0 (2016-10-10)
1120-------------------
1121
1122### Added
1123
1124- Introduced continuous integration builds for Linux- and Windows 32-bit
1125  binaries
1126
1127- Added commands for setting- and getting the window position
1128
1129- Added new extension commands for finding an element’s anonymous
1130  children and querying its attributes; accessible through the
1131  `/session/{sessionId}/moz/xbl/{elementId}/anonymous_children`
1132  to return all anonymous children and
1133  `/session/{sessionId}/moz/xbl/{elementId}/anonymous_by_attribute` to
1134  return an anonymous element by a name and attribute query
1135
1136- Introduced a [`moz:firefoxOptions`] capability to customise a Firefox
1137  session:
1138
1139  - The `binary`, `args`, and `profile` entries on this dictionary
1140    is equivalent to the old `firefox_binary`, `firefox_args`, and
1141    `firefox_profile` capabilities, which have now all been removed
1142
1143  - The `log` capability takes a dictionary such as `{log: "trace"}`
1144    to enable trace level verbosity in Gecko
1145
1146  - The `prefs` capability lets you define Firefox preferences through
1147    capabilities
1148
1149- Re-introduced the `--webdriver-port` argument as a hidden alias to
1150  `--port`
1151
1152### Changed
1153
1154- `firefox_binary`, `firefox_args`, and `firefox_profile` capabilities
1155  removed in favour of the [`moz:firefoxOptions`] dictionary detailed above
1156  and in the [README]
1157
1158- Removed `--no-e10s` flag, and geckodriver will from now rely on the
1159  Firefox default multiprocessing settings (override using preferences)
1160
1161- Disable pop-up blocker in the default profile by @juangj
1162
1163- Changed Rust compiler version to 1.12 (beta)
1164  temporarily because of [trouble linking Musl
1165  binaries](https://github.com/rust-lang/rust/issues/34978)
1166
1167- Replaced _env_logger_ logging facility with the _slog_ package,
1168  causing the `RUST_LOG` environment variable to no longer have any affect
1169
1170- Updated the WebDriver Rust library to version 0.15
1171
1172### Fixed
1173
1174- Corrected link to repository in Cargo metadata
1175
1176- Verbosity shorthand flag `-v[v]` now works again, following the
1177  replacement of the argument parsing library in the previous release
1178
1179- When the HTTPD fails to start, errors are propagated to the user
1180
1181- Disabled the additional welcome URL
1182  (`startup.homepage_welcome_url.additional`) so that officially branded
1183  Firefox builds do not start with two open tabs in fresh profiles
1184
1185- Disabled homepage override URL redirection on milestone upgrades,
1186  which means a tab with an upgrade notice is not displayed when launching
1187  a new Firefox version
1188
1189
11900.10.0 (2016-08-02)
1191-------------------
1192
1193### Changed
1194
1195- Use multi-process Firefox (e10s) by default, added flag `--no-e10s`
1196  to disable it and removed `--e10s` flag
1197
1198- Disable autofilling of forms by default by [Sven Jost]
1199
1200- Replace _argparse_ with _clap_ for arguments parsing
1201
1202### Fixed
1203
1204- Attempt to deploy a single file from Travis when making a release
1205
1206- Grammar fix in [README]
1207
1208
12090.9.0 (2016-06-30)
1210------------------
1211
1212### Added
1213
1214- Add ability to use `firefox_binary` capability to define location of
1215  Firefox to use
1216
1217- Automatically detect the default Firefox path if one is not given
1218
1219- Cross-compile to Windows and ARMv7 (HF) in CI
1220
1221- Add Musl C library-backed static binaries in CI
1222
1223- Add `-v`, `-vv`, and `--log LEVEL` flags to increase Gecko verbosity
1224
1225- Add Get Element Property endpoint
1226
1227- Add new `--version` flag showing copying information and a link to
1228  the repository
1229
1230### Changed
1231
1232- Now connects to a Marionette on a random port by default
1233
1234- Update webdriver-rust library dependency
1235
1236- Migrated to use Travis to deploy new releases
1237
1238- Reduced amount of logging
1239
1240- Introduced a changelog (this)
1241
1242
12430.8.0 (2016-06-07)
1244------------------
1245
1246### Added
1247
1248- Allow specifying array of arguments to the Firefox binary through the
1249  `firefox_args` capability
1250
1251- Pass parameters with [New Session] command
1252
1253### Changed
1254
1255- Change product name to _geckodriver_
1256
1257- Make README more exhaustive
1258
1259- Quit Firefox when deleting a session
1260
1261- Update webdriver-rust library
1262
1263- Update dependencies
1264
1265### Fixed
1266
1267- Fix tests
1268
1269- FIx typo in error message for parsing errors
1270
1271
12720.7.1 (2016-04-27)
1273------------------
1274
1275### Added
1276
1277- Add command line flag for using e10s enabled Firefox by [Kalpesh
1278  Krishna]
1279
1280- Allow providing custom profiles
1281
1282### Changed
1283
1284- Allow binding to an IPv6 address by [Jason Juang]
1285
1286- By default, connect to host-agnostic localhost by [Jason Juang]
1287
1288- Make `GeckoContextParameters` public
1289
1290- Update dependencies
1291
1292### Fixed
1293
1294- Squash rustc 1.6 warnings by using `std::thread::sleep(dur: Duration)`
1295
1296
12970.6.2 (2016-01-20)
1298------------------
1299
1300### Added
1301
1302- Add LICENSE file from [Joshua Burning]
1303
1304- Schedule builds in CI on pushes and pull requests
1305
1306### Changed
1307
1308- Enable CPOWs in Marionette
1309
1310
13110.6.0 (2016-01-12)
1312------------------
1313
1314### Added
1315
1316- Add Get Page Source endpoint
1317
1318### Changed
1319
1320- Handle arrays being sent from Marionette
1321
1322- Correct build steps in [README]
1323
1324- Update what properties are read from errors sent by Marionette
1325
1326- Update dependencies
1327
1328
13290.5.0 (2015-12-10)
1330------------------
1331
1332### Changed
1333
1334- Update argparse dependency to use Cargo
1335
1336- Update to the latest version of the Marionette wire protocol
1337
1338- Update to latest webdriver-rust library
1339
1340- Update dependencies
1341
1342
13430.4.2 (2015-10-02)
1344------------------
1345
1346### Changed
1347
1348- Skip compiling optional items in hyper
1349
1350
13510.4.1 (2015-10-02)
1352------------------
1353
1354### Changed
1355
1356- Update webdriver-rust library
1357
1358- Update dependencies
1359
1360
13610.4.0 (2015-09-28)
1362------------------
1363
1364### Added
1365
1366- Add command extensions for switching between content- and chrome
1367  contexts
1368
1369- Add more documentation from [Vlad Filippov]
1370
1371### Changed
1372
1373- Update Cargo.lock with new dependencies for building
1374
1375- Update for protocol updates that flatten commands
1376
1377- Update to new protocol error handling
1378
1379- Update for Marionette protocol version 3 changes
1380
1381- Strip any leading and trailing `{}` from the `sessionId` Marionette
1382  returns
1383
1384- Update dependencies
1385
1386### Fixed
1387
1388- Fix `GetCSSValue` message to send correct key `propertyName`
1389
1390- Fix example in documentation from @vladikoff
1391
1392
13930.3.0 (2015-08-17)
1394------------------
1395
1396### Added
1397
1398- Add support for finding elements in subtrees
1399
1400
14010.2.0 (2015-05-20)
1402------------------
1403
1404### Added
1405
1406- Extra debug messages
1407
1408- Add ability to set WebDriver port
1409
1410- Add support for getting the active element
1411
1412- Add support for `GetCookies` and `DeleteCookie`/`DeleteCookies`
1413
1414- Add preferences that switch off certain features not required for
1415  WebDriver tests
1416
1417### Changed
1418
1419- Make failing to communicate with Firefox a fatal error that closes
1420  the session
1421
1422- Shut down session only when losing connection
1423
1424- Better handling of missing command line flags
1425
1426- Poll for connection every 100ms rather than every 100s
1427
1428- Switch to string-based error codes
1429
1430- Switch webdriver-rust library dependency to be pulled from git
1431
1432- Update dependencies
1433
1434### Fixed
1435
1436- Handle null id for switching to frame more correctly
1437
1438
14390.1.0 (2015-04-09)
1440------------------
1441
1442### Added
1443
1444- Add proxy for converting WebDriver HTTP protocol to Marionette protocol
1445
1446- Add endpoints for modal dialogue support
1447
1448- Allow connecting to a running Firefox instance
1449
1450- Add explicit Cargo.lock file
1451
1452- Start Firefox when we get a [NewSession] command
1453
1454- Add flag parsing and address parsing
1455
1456- Add basic error handling
1457
1458### Changed
1459
1460- Update for Rust beta
1461
1462- Switch to new IO libraries
1463
1464- Pin webdriver-rust commit so we can upgrade rustc versions independently
1465
1466- Set preferences when starting Firefox
1467
1468- Improve some error messages
1469
1470- Re-enable environment variable based logging
1471
1472### Fixed
1473
1474- Fix Get Element Rect command to return floats instead of integers
1475
1476- Fix passing of web elements to Switch To Frame command
1477
1478- Fix serialisation of script commands
1479
1480- Fix assorted bugs found by the Selenium test suite
1481
1482- Fix conversion of Find Element/Find Elements responses from Marionette
1483  to WebDriver
1484
1485- Fixed build by updating Cargo.lock with new dependencies for building
1486
1487- Squash compile warnings
1488
1489
1490
1491[README]: https://github.com/mozilla/geckodriver/blob/master/README.md
1492[Browser Toolbox]: https://developer.mozilla.org/en-US/docs/Tools/Browser_Toolbox
1493[WebDriver conformance]: https://wpt.fyi/results/webdriver/tests?label=experimental
1494[`moz:firefoxOptions`]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions
1495[`moz:debuggerAddress`]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html#moz-debuggeraddress
1496[Microsoft Visual Studio redistributable runtime]: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
1497[GeckoView]: https://wiki.mozilla.org/Mobile/GeckoView
1498[Fission]: https://wiki.mozilla.org/Project_Fission
1499[Capabilities]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html
1500[Flags]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html
1501[enable remote debugging on the Android device]: https://developers.google.com/web/tools/chrome-devtools/remote-debugging
1502[macOS notarization]: https://firefox-source-docs.mozilla.org/testing/geckodriver/Notarization.html
1503
1504[`CloseWindowResponse`]: https://docs.rs/webdriver/newest/webdriver/response/struct.CloseWindowResponse.html
1505[`CookieResponse`]: https://docs.rs/webdriver/newest/webdriver/response/struct.CookieResponse.html
1506[`DeleteSession`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.DeleteSession
1507[`ElementClickIntercepted`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.ElementClickIntercepted
1508[`ElementNotInteractable`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.ElementNotInteractable
1509[`FullscreenWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.FullscreenWindow
1510[`GetNamedCookie`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.GetNamedCookie
1511[`GetWindowRect`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.GetWindowRect
1512[`InvalidCoordinates`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.InvalidCoordinates
1513[`MaximizeWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.MaximizeWindow
1514[`MinimizeWindow`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.MinimizeWindow
1515[`NewSession`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.NewSession
1516[`NoSuchCookie`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.NoSuchCookie
1517[`RectResponse`]: https://docs.rs/webdriver/0.27.0/webdriver/response/struct.RectResponse.html
1518[`SendKeysParameters`]: https://docs.rs/webdriver/newest/webdriver/command/struct.SendKeysParameters.html
1519[`SessionNotCreated`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.SessionNotCreated
1520[`SetTimeouts`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.SetTimeouts
1521[`SetWindowRect`]: https://docs.rs/webdriver/newest/webdriver/command/enum.WebDriverCommand.html#variant.SetWindowRect
1522[`StaleElementReference`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.StaleElementReference
1523[`UnableToCaptureScreen`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnableToCaptureScreen
1524[`UnknownCommand`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnknownCommand
1525[`UnknownError`]: https://docs.rs/webdriver/newest/webdriver/error/enum.ErrorStatus.html#variant.UnknownError
1526[`WindowRectParameters`]: https://docs.rs/webdriver/newest/webdriver/command/struct.WindowRectParameters.html
1527
1528[Add Cookie]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Commands/AddCookie
1529[invalid argument]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/InvalidArgument
1530[invalid session id]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/InvalidSessionID
1531[script timeout]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/ScriptTimeout
1532[timeout]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/Timeout
1533[timeout object]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Timeouts
1534[`platformName` capability]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities#platformName
1535
1536[hyper]: https://hyper.rs/
1537[mozrunner crate]: https://crates.io/crates/mozrunner
1538[serde]: https://serde.rs/
1539[webdriver crate]: https://crates.io/crates/webdriver
1540
1541[Actions]: https://w3c.github.io/webdriver/webdriver-spec.html#actions
1542[Delete Session]: https://w3c.github.io/webdriver/webdriver-spec.html#delete-session
1543[Element Click]: https://w3c.github.io/webdriver/webdriver-spec.html#element-click
1544[Get Timeouts]: https://w3c.github.io/webdriver/webdriver-spec.html#get-timeouts
1545[Get Window Rect]: https://w3c.github.io/webdriver/webdriver-spec.html#get-window-rect
1546[insecure certificate]: https://w3c.github.io/webdriver/webdriver-spec.html#dfn-insecure-certificate
1547[Minimize Window]: https://w3c.github.io/webdriver/webdriver-spec.html#minimize-window
1548[New Session]: https://w3c.github.io/webdriver/webdriver-spec.html#new-session
1549[New Window]: https://developer.mozilla.org/en-US/docs/Web/WebDriver/Commands/New_Window
1550[Print]: https://w3c.github.io/webdriver/webdriver-spec.html#print
1551[Send Alert Text]: https://w3c.github.io/webdriver/webdriver-spec.html#send-alert-text
1552[Set Timeouts]: https://w3c.github.io/webdriver/webdriver-spec.html#set-timeouts
1553[Set Window Rect]: https://w3c.github.io/webdriver/webdriver-spec.html#set-window-rect
1554[Status]: https://w3c.github.io/webdriver/webdriver-spec.html#status
1555[Take Element Screenshot]: https://w3c.github.io/webdriver/webdriver-spec.html#take-element-screenshot
1556[WebDriver errors]: https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors
1557
1558[Bastien Orivel]: https://github.com/Eijebong
1559[Jason Juang]: https://github.com/juangj
1560[Jeremy Lempereur]: https://github.com/o0Ignition0o
1561[Joshua Bruning]: https://github.com/joshbruning
1562[Kalpesh Krishna]: https://github.com/martiansideofthemoon
1563[Kriti Singh]: https://github.com/kritisingh1
1564[Mike Pennisi]: https://github.com/jugglinmike
1565[Nupur Baghel]: https://github.com/nupurbaghel
1566[Peter Major]: https://github.com/aldaris
1567[Shivam Singhal]: https://github.com/championshuttler
1568[Sven Jost]: https://github/mythsunwind
1569[Vlad Filippov]: https://github.com/vladikoff
1570