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