Skip to content

Releases: mozilla/geckodriver

0.27.0

29 Jul 08:50
917daac
Compare
Choose a tag to compare

0.27.0 (2020-07-27, 7b8c4f32cdde)

Security Fixes

  • CVE-2020-15660

    • Added additional checks on the Content-Type header for POST requests to disallow application/x-www-form-urlencoded, multipart/form-data and text/plain.

    • Added checking of the Origin header for POST requests.

    • The version number of Firefox is now checked when establishing a session.

Known problems

  • macOS 10.15 (Catalina):

    Due to the requirement from Apple that all programs must be notarized, geckodriver will not work on Catalina if you manually download it through another notarized program, such as Firefox.

    Whilst we are working on a repackaging fix for this problem, you can find more details on how to work around this issue in the macOS notarization section of the documentation.

  • Android:

    Marionette will only be enabled in GeckoView based applications when the
    Firefox preference devtools.debugger.remote-enabled is set to True via
    moz:firefoxOptions. This will be fixed in the Firefox 90 release for Android.

    In some cases geckodriver could crash due to a stack overflow when handling
    certain device errors.

Added

  • To set environment variables for the launched Firefox for Android, it is now possible to add an env object on moz:firefoxOptions (note: this is not supported for Firefox Desktop)

  • Support for print-to-PDF

    The newly standardised WebDriver [Print] endpoint provides a way to render pages to a paginated PDF representation. This endpoint is supported by geckodriver when using Firefox version ≥78.

  • Support for same-site cookies

    Cookies can now be set with a same-site parameter, and the value of that parameter will be returned when cookies are retrieved. Requires Firefox version ≥79. Thanks to Peter Major for the patch.

Fixed

  • Android:

    • Firefox running on Android devices can now be controlled from a Windows host.

    • Setups with multiple connected Android devices are now supported.

    • Improved cleanup of configuration files. This prevents crashes if the application is started manually after launching it through geckodriver.

  • Windows and Linux binaries are again statically linked.

v0.26.0

11 Oct 23:34
Compare
Choose a tag to compare

Built from e9783a644016.

Note that with this release the minimum recommended Firefox version
has changed to Firefox ≥60.

Known problems

  • macOS 10.15 (Catalina):

    Due to the recent requirement from Apple that all programs must
    be notarized, geckodriver will not work on Catalina if you manually
    download it through another notarized program, such as Firefox.

    Whilst we are working on a repackaging fix for this problem, you
    can find more details on how to work around this issue in the
    macOS notarization section of the documentation.

  • Windows:

    You must still have the Microsoft Visual Studio redistributable
    runtime
    installed on your system for the binary to run. This
    is a known bug which we weren't able fix for this release.

  • Android:

    Marionette will only be enabled in GeckoView based applications when the
    Firefox preference devtools.debugger.remote-enabled is set to True via
    moz:firefoxOptions. This will be fixed in the Firefox 90 release for Android.

    In some cases geckodriver could crash due to a stack overflow when handling
    certain device errors.

Added

  • Support for Firefox on Android

    Starting with this release geckodriver is able to connect to
    Firefox on Android systems, and to control packages based on
    GeckoView.

    Support for Android works by the geckodriver process running on
    a host system and Firefox running within either an emulator or
    on a physical device connected to the host system. This requires
    you to first enable remote debugging on the Android device.

    The WebDriver client must set the platformName capability to
    "android" and the androidPackage capability within
    moz:firefoxOptions to the Android package name of the Firefox
    application.

    The full list of new capabilities specific to Android, instructions
    how to use them, and examples can be found in the moz:firefoxOptions
    documentation on MDN.

    When the session is created, the platformName capability will
    return "android" instead of reporting the platform of the host
    system.

Changed

  • Continued Marionette refactoring changes

    0.25.0 came with a series of internal changes for how geckodriver
    communicates with Firefox over the Marionette protocol. This
    release contains the second half of the refactoring work.

Fixed

  • Connection attempts to Firefox made more reliable

    geckodriver now waits for the Marionette handshake before assuming
    the session has been established. This should improve reliability
    in creating new WebDriver sessions.

  • Corrected error codes used during session creation

    When a new session was being configured with invalid input data,
    the error codes returned was not always consistent. Attempting
    to start a session with a malformed capabilities configuration
    will now return the invalid argument error consistently.

v0.25.0

10 Sep 13:26
Compare
Choose a tag to compare

Built from bdb64cf16b68.

Note to Windows users! With this release you must have the Microsoft Visual Studio redistributable runtime installed on your system for the binary to run. This is a known bug with this particular release that we intend to release a fix for soon.

Added

  • Added support for HTTP HEAD requests to the HTTPD

    geckodriver now responds correctly to HTTP HEAD requests,
    which can be used for probing whether it supports a particular API.

    Thanks to Bastien Orivel for this patch.

  • Added support for searching for Nightly’s default path on macOS

    If the location of the Firefox binary is not given, geckodriver
    will from now also look for the location of Firefox Nightly in
    the default locations. The ordered list of search paths on macOS
    is as follows:

    1. /Applications/Firefox.app/Contents/MacOS/firefox-bin
    2. $HOME/Applications/Firefox.app/Contents/MacOS/firefox-bin
    3. /Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin
    4. $HOME/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin

    Thanks to Kriti Singh for this patch.

  • Support for application bundle paths on macOS

    It is now possible to pass an application bundle path, such as
    /Applications/Firefox.app as argument to the binary field in
    moz:firefoxOptions. This will be automatically resolved to
    the absolute path of the binary when Firefox is started.

    Thanks to Nupur Baghel for this patch.

  • macOS and Windows builds are signed

    With this release of geckodriver, executables for macOS and Windows
    are signed using the same certificate key as Firefox. This should
    help in cases where geckodriver previously got misidentified as
    a virus by antivirus software.

Removed

  • Dropped support for legacy Selenium web element references

    The legacy way of serialising web elements, using {"ELEMENT": <UUID>},
    has been removed in this release. This may break older Selenium
    clients and clients which are otherwise not compatible with the
    WebDriver standard.

    Thanks to Shivam Singhal for this patch.

  • Removed --webdriver-port command-line option

    --webdriver-port <PORT> was an undocumented alias for --port,
    initially used for backwards compatibility with clients
    prior to Selenium 3.0.0.

Changed

  • Refactored Marionette serialisation

    Much of geckodriver’s internal plumbing for serialising WebDriver
    requests to Marionette messages has been refactored to decrease
    the amount of manual lifting.

    This work should have no visible side-effects for users.

    Thanks to Nupur Baghel for working on this throughout her
    Outreachy internship at Mozilla.

  • Improved error messages for incorrect command-line usage

Fixed

  • Errors related to incorrect command-line usage no longer hidden

    By mistake, earlier versions of geckodriver failed to print incorrect
    flag use. With this release problems are again written to stderr.

  • Search system path for Firefox binary on BSDs

    geckodriver would previously only search the system path for the
    firefox binary on Linux. Now it supports different BSD flavours
    as well.

v0.24.0

28 Jan 22:50
Compare
Choose a tag to compare

Built from 917474f3473e.

Added

  • Introduces strictFileInteractability capability

    The new capabilitiy indicates if strict interactability checks
    should be applied to <input type=file> elements. As strict
    interactability checks are off by default, there is a change
    in behaviour when using Element Send Keys
    with hidden file upload controls.

  • Added new endpoint GET /session/{session id}/moz/screenshot/full
    for taking full document screenshots, thanks to Greg Fraley.

  • Added new --marionette-host <HOSTNAME> flag for binding to a
    particular interface/IP layer on the system.

  • Added new endpoint POST /session/{session_id}/window/new
    for the New Window command to create a new top-level browsing context,
    which can be either a window or a tab. This feature requires
    Firefox 66 or later.

  • When using the preference devtools.console.stdout.content set to
    true logging of console API calls like info(), warn(), and
    error() can be routed to stdout.

  • geckodriver now sets the app.update.disabledForTesting preference
    to prevent Firefox >= 65 from automatically updating whilst under
    automation.

Removed

  • Turned off builds for arm7hf, which will no longer be released but
    can still be built from the source.

Changed

  • Allow file uploads to hidden <input type=file> elements

    Through a series of changes to the WebDriver specification,
    geckodriver is now aligned with chromedriver’s behaviour that
    allows interaction with hidden <input type=file> elements.

    This allows WebDriver to be used with various popular web
    frameworks that—through indirection—hides the file upload control
    and invokes it through other means.

  • Allow use of an indefinite script timeout for the Set Timeouts
    command, thanks to reimu.

Fixed

  • Corrected Content-Type of response header to utf-8 to fix
    an HTTP/1.1 compatibility bug.

  • Relaxed the deserialization of timeouts parameters to allow unknown
    fields for the Set Timeouts command.

  • Fixed a regression in the Take Element Screenshot to not screenshot
    the viewport, but the requested element.

v0.23.0

28 Jan 15:12
Compare
Choose a tag to compare

This release contains a number of fixes for regressions introduced
in 0.22.0, where we shipped a significant refactoring to the way
geckodriver internally dealt with JSON serialisation.

Removed

  • The POST /session/{session id}/element/{element id}/tap endpoint
    was removed, thanks to Kerem Kat.

Changed

Fixed

  • desiredCapabilities and requiredCapabilities are again
    recognised on session creation

    A regression in 0.22.0 caused geckodriver to recognise desired
    and required instead of the correct desiredCapabilities
    and requiredCapabilities. This will have caused significant
    problems for users who relied on this legacy Selenium-style
    session creation pattern.

    Do however note that support for Selenium-styled new session
    requests is temporary and that this will be removed sometime
    before the 1.0 release.

  • duration field made optional on pause actions

    A regression in 0.22.0 caused the pause action primitive to
    require a duration field. This has now been fixed so that
    pauses in action chains can be achieved with the default duration.

  • Log level formatted to expected Marionette input

    A regression in 0.22.0 caused the log level to be improperly
    formatted when using Firefox pre-releases. This is now fixed so
    that the requested log level is correctly interpreted by Marionette.

  • temporary field on addon installation made optional

    A regression in 0.22.0 caused the temporary field for POST
    /session/{session id}/moz/addon/install to be mandatory. This has
    now been fixed so that an addon is installed permanently by default.

  • SHA1s in version information uses limited number of characters

    The SHA1 used in --version when building geckodriver from a
    git repository is now limited to 12 characters, as it is when
    building from an hg checkout. This ensures reproducible builds.

v0.22.0

15 Sep 23:49
Compare
Choose a tag to compare

This release marks an important milestone on the path towards
a stable release of geckodriver. Large portions of geckodriver
and the [webdriver] library it is based on has been refactored to
accommodate using serde for JSON serialization.

We have also made great strides to improving WebDriver conformance,
to the extent that geckodriver is now almost entirely conforming
to the standard.

Added

  • Support for WebDriver web element-, web frame-, and web window
    identifiers from Firefox.

  • Added support for the non-configurable setWindowRect capability
    from WebDriver.

    This capability informs whether the attached browser supports
    manipulating the window dimensions and position.

  • A new extension capability moz:geckodriverVersion is returned
    upon session creation.

Changed

  • All JSON serialization and deserialisation has moved from
    rustc_serialize to serde.

  • The HTTP status codes used for script timeout and timeout
    errors has changed from Request Timeout (408) to Internal Server
    Error (500) in order to not break HTTP/1.1 Keep-Alive support,
    as HTTP clients interpret the old status code to mean they should
    duplicate the request.

  • The HTTP/1.1 Keep-Alive timeout for persistent connections has
    been increased to 90 seconds.

  • An invalid session ID error is now returned when there is no
    active session.

  • An invalid argument error is now returned when Add Cookie
    is given invalid parameters.

  • The handshake when geckodriver connects to Marionette has been
    hardened by killing the Firefox process if it fails.

  • The handshake read timeout has been reduced to 10 seconds instead
    of waiting forever.

  • The HTTP server geckodriver uses, hyper, has been upgraded to
    version 0.12, thanks to Bastien Orivel.

  • geckodriver version number is no longer logged on startup, as
    the log level is not configured until a session is created.

    The version number is available through --version, and now
    also through a new moz:geckodriverVersion field in the matched
    capabilities.

  • The webdriver library has been updated to version 0.37.0.

Fixed

v0.21.0

15 Jun 20:57
Compare
Choose a tag to compare

Note that with this release of geckodriver the minimum recommended
Firefox and Selenium versions have changed:

  • Firefox 57 (and greater)
  • Selenium 3.11 (and greater)

Added

  • Support for the chrome element identifier from Firefox.

  • The unhandledPromptBehavior capability now accepts accept and notify, dismiss and notify, and ignore options.

    Note that the unhandled prompt handler is not fully supported in
    Firefox at the time of writing.

Changed

  • Firefox will now be started with the -foreground and -no-remote
    flags if they have not already been specified by the user in
    moz:firefoxOptions.

    -foreground will ensure the application window gets focus when
    Firefox is started, and -no-remote will prevent remote commands
    to this instance of Firefox and also ensure we always start a new
    instance.

  • WebDriver commands that do not have a return value now correctly
    return {value: null} instead of an empty dictionary.

  • The HTTP server now accepts Keep-Alive connections.

  • Firefox remote protocol command mappings updated.

    All Marionette commands changed to make use of the WebDriver:
    prefixes introduced with Firefox 56.

  • Overhaul of Firefox preferences.

    Already deprecated preferences in Firefox versions earlier than
    57 got removed.

  • webdriver crate upgraded to 0.36.0.

Fixed

  • Force use of IPv4 network stack.

    On certain system configurations, where localhost resolves to
    an IPv6 address, geckodriver would attempt to connect to Firefox
    on the wrong IP stack, causing the connection attempt to time out
    after 60 seconds. We now ensure that geckodriver uses IPv4
    consistently to both connect to Firefox and for allocating a free
    port.

  • geckodriver failed to locate the correct Firefox binary if it was
    found under a firefox or firefox-bin directory, depending on
    the system, because it thought the parent directory was the
    executable.

  • On Unix systems (macOS, Linux), geckodriver falsely reported
    non-executable files as valid binaries.

  • When stdout and stderr is redirected by geckodriver, a bug prevented
    the redirections from taking effect.

v0.20.1

08 Apr 12:45
Compare
Choose a tag to compare

Fixed

  • Avoid attempting to kill Firefox process that has stopped.

    With the change to allow Firefox enough time to shut down in
    0.20.0, geckodriver started unconditionally killing the process
    to reap its exit status. This caused geckodriver to inaccurately
    report a successful Firefox shutdown as a failure.

    The regression should not have caused any functional problems, but
    the termination cause and the exit status are now reported correctly.

v0.20.0

12 Mar 23:21
Compare
Choose a tag to compare

Added

  • New --jsdebugger flag to open the Browser Toolbox when Firefox
    launches. This is useful for debugging Marionette internals.

  • Introduced the temporary, boolean capability
    moz:useNonSpecCompliantPointerOrigin to disable the WebDriver
    conforming behavior of calculating the Pointer Origin.

Changed

  • HTTP status code for the StaleElementReference error changed
    from 400 (Bad Request) to 404 (Not Found).

  • Backtraces from geckodriver no longer substitute for missing
    Marionette stacktraces.

  • webdriver crate upgraded to 0.35.0.

Fixed

  • The Firefox process is now given ample time to shut down, allowing
    enough time for the Firefox shutdown hang monitor to kick in.

    Firefox has an integrated background monitor that observes
    long-running threads during shutdown. These threads will be
    killed after 63 seconds in the event of a hang. To allow Firefox
    to shut down these threads on its own, geckodriver has to wait
    that time and some additional seconds.

  • Grapheme clusters are now accepted as input for keyboard input
    to actions.

    Input to the value field of the keyDown and keyUp action
    primitives used to only accept single characters, which means
    geckodriver would error when a valid grapheme cluster was sent in,
    for example with the tamil nadu character U+0BA8 U+0BBF.

    Thanks to Greg Fraley for fixing this bug.

  • Improved error messages for malformed capability values.

v0.19.1

31 Oct 19:13
Compare
Choose a tag to compare

Changed

  • Search suggestions in the location bar turned off as not to
    trigger network connections

  • Block addons incompatible with E10s

Fixed

  • Marionette stacktraces are now correctly propagated

  • Some error messages have been clarified

Removed

  • Removed obsolete socksUsername and socksPassword proxy
    configuration keys because neither were picked up or recognised