Changelog

9.1.1

Released 12/03/2021

Bugfixes:

  • Fixed a regression in 9.1.0 where our built binary didn't contain patches to some dependencies. Addressed in #19239. This fixed some issues including:
    • Requests containing ~ will no longer be improperly encoded. Fixes #19083, #19084, #19115, #19096, #19178.
    • A TypeError displaying data.hasOwnProperty is not a function will no longer throw in some situations. Fixes #19091.
    • Empty extra hooks will no longer be sent as data when recording to the Dashboard. Fixes #19087.
  • When using the default configuration of "nodeVersion": "system" with an installed system node >=17, Cypress will now work properly rather than throw an error incorrectly pointing to the user's plugin file. Fixes #18914.
  • Shadow DOM elements no longer error as hidden during actionability when the element is covered by its parent shadow root. Fixes #18008.
  • When using .type() events now correctly propagate out of the shadow DOM. Fixes #17531.
  • The this context is now properly preserved when overwriting cy.clock(). Fixes #19158.

Dependencies:

  • Upgraded @cypress/request from 2.88.7 to 2.88.10. Addressed in #19099.

9.1.0

Released 11/22/2021

Features:

  • A CYPRESS environment variable will be set to true in child processes where Cypress runs user code in Node.js. You can now detect that you're running in Cypress by looking for process.env.CYPRESS. Addresses #18805.

Bugfixes:

  • Specs with % in the filename will no longer fail to load and now behave as any other spec. Fixes #18871.
  • When using the Selector Playground, the HTML attribute's value will be wrapped in double-quotes. Fixes #1884.
  • The call count is now shown in the Command Log when using cy.stub().log(false). Fixes #18907.
  • The warning message for retrying connection to a browser has been improved to indicate when it is still waiting. Fixes #18644.
  • Cypress commands that rely on this context now have access to this when overridden. Fixes #18899.
  • Test configuration is now correctly applied when using only. Fixes #18959.

9.0.0

Released 11/10/2021

Breaking Changes:

  • The nodeVersion configuration option now defaults to system. The behavior of the system option has changed to always use the Node.js binary/version that launched Cypress. If Cypress was not launched via the terminal, Cypress will use the bundled Node.js version. This could change the behavior of code within your pluginsFile since it may be run in your system Node.js version. Addresses #18684.
  • Windows 32-bit is no longer supported in Cypress. Addresses #17962.
  • An error will now be thrown if an invalid value is passed to Cypress.config. Previously invalid values were ignored and could cause unexpected behavior. Addresses #18589.
  • cy.contains() no longer yields the <body> element when it matches the content of <script> or <style> tags. Addresses #14861.
  • Attempting to add an existing built-in Cypress command using Cypress.Commands.add() will now throw an error, indicating that Cypress.Commands.overwrite() should be used instead to overwrite the behavior of existing commands. Addresses #18572.
  • Custom command implementations are now typed based on the declared custom chainables. Addresses #17496.
  • The bundled Node.js version was upgraded from 14.17.0 to 16.5.0. This could change the behavior of code within the pluginsFile when using the bundled Node.js version of Cypress. Addressed in #18317.

Deprecations:

  • The nodeVersion configuration option has been deprecated and will be removed in a future release.

Features:

  • When null is passed as the encoding to cy.readFile() or cy.fixture(), the file is treated as binary and read as a Buffer. Similarly, null passed as the encoding to cy.writeFile() allows direct writing of buffers. If the encoding is unspecified, the default remains utf8, matching the current behavior. Addresses #18534.

Bugfixes:

  • Sticky elements within a fixed container will now be able to be properly scrolled to during action commands. Fixes #4233.
  • document.referrer will now correctly reflect the correct value from the application under test after cy.visit(). Fixes #4295.

Dependencies:

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 91 to 94. Addressed in #15292.
  • Upgraded bundled Node.js version from 14.17.0 to 16.5.0. Addressed in #15292.
  • Upgraded electron from 14.1.0 to 15.2.0. Addressed in #15292.

8.7.0

Released 10/25/2021

Features:

  • There are changes to how "slow" tests are determined and displayed in Cypress. Addresses #18496.
    • Added a slowTestThreshold configuration option to customize when tests are considered "slow" during cypress run. A test that runs slower than the given threshold will display in orange text in the default 'spec' reporter. This configuration can be set in your Cypress config file or via specific test configuration.
    • The default slow test threshold was changed from 75ms (Mocha's default) to 10000ms for e2e tests and 250ms for component tests. To restore the old behavior, you can add "slowTestThreshold": 75 to your Cypress config file.
    • All tests will show the time the test ran in milliseconds during cypress run with the default 'spec' reporter.
  • Users can pass an overwrite: true option to Cypress.Screenshot.defaults to change default behavior to overwrite existing screenshots without having to set overwrite for each cy.screenshot() command. Addresses #7955.

Bugfixes:

  • Fixed a regression introduced in 8.6.0 where videos recorded in Electron to the Dashboard were not playable in the Firefox or Safari browser and were not compatible with QuickTime player in MacOS.
  • Fixed a regression introduced in 8.6.0 so that the warning about the projectRoot directory not being writeable will now display correctly. Fixes #18485.
  • Improved the error message when running Cypress without non-root permissions. Fixes #18445.
  • An error now throws when invalid options are passed to the selectorPriority configuration option of Cypress.SelectorPlayground.defaults. Valid values are data-*, id, class, tag, attribute, or nth-child. Fixes #7745.

Dependency Updates:

  • Pinned resolution of ua-parser-js to 0.7.24 to avoid dependency resolution to the compromised package versions. Please read the security advisory and take actions advised as soon as possible. Addressed in #18611

8.6.0

Released 10/11/2021

Features:

  • cy.screenshot() now accepts overwrite: true as an option to overwrite existing screenshots with the same file name. Addresses #7955.
  • cy.select([]) can now be used to clear any selected options in a multi-value select. Addresses #4318.
  • Using cy.pause() when using cypress run --headed --no-exit will now pause a test. Addresses #4044.

Bugfixes:

  • Fixed a regression introduced in 8.2.0 where certain XMLHttpRequests would not display their response bodies in the DevTools Console when clicked. Fixes #17656.
  • Fixed a regression in 8.3.0 where capturing videos in Chrome versions earlier than 89 would result in choppy videos and skipped frames. Fixes #18021.
  • Cypress displays the correct error when certain custom error types are thrown within a test. Fixes #18259.
  • The Cypress App will no longer crash when passed a --spec: {} from the CLI and instead error when passed an invalid object argument. Fixes #3957.
  • Logging a plain object no longer results in the error "Cannot convert object to primitive value". Fixes #18143.

Misc:

  • Updated the cy.request() error message when conflicting failOnStatusCode and retryOnStatusCodeFailure options are passed to be clearer. Fixes #18271.

Dependency Updates:

  • Upgraded the Chromium browser version used during cypress run and when selecting Electron browser in cypress open from 91.0.4472.164 to 93.0.4577.58.
  • Upgraded electron from 13.2.0 to 14.1.0. Addressed in #18318 and #18384.

8.5.0

Released 09/27/2021

Features:

  • You can now select an option by index within the .select() command. Addresses #757.
  • Cypress now captures the repository URL on Drone CI. Addresses #18210.

Bugfixes:

  • The download of Cypress now respects the NO_PROXY environment variable when one is set. Fixes #17702.
  • When using a custom config file and setting it up to record to the Dashboard, Cypress now writes the projectId in the custom config file instead of cypress.json. Fixes #5747.

Misc:

  • Windows 32-bit has been deprecated and support will be removed in a later release. A deprecation warning will now display when using Cypress in a Windows 32-bit OS. See #17962 for more detail. Addresses #18094.
  • Improved the error messages when an invalid argument type is passed to the .select() command. Addressed in #18234.

8.4.1

Released 09/17/2021

Bugfixes:

  • Cypress will no longer crash when setting up a project to record to the Dashboard or viewing the runs or record key for a previously set up project. Fixes #18129.
  • The branch collected for Drone CI now correctly reflects the source PR branch for showing in the Cypress Dashboard. Fixes #17860.

8.4.0

Released 09/13/2021

Features:

  • When the URL contains non-ASCII characters, you can use the new decode option of cy.url() to decode it. Addresses #17399.

Bugfixes:

  • Cypress now better handles situations where the extension was installed in a read-only location. Fixes #3852.
  • A clearer error message is now thrown for .check() or .uncheck() when there are no matching value attributes found. Fixes#7379.
  • Hooks will no longer rerun on unrelated tests in some situations after a domain navigation. Fixes #17705.
  • clientCertificate types have been added for the Cypress configuration. Fixes #17799.

8.3.1

Released 08/27/2021

Performance:

  • Projects will now open much faster on MacOS Big Sur with improved browser detection performance. Fixes #17773.

Bugfixes:

  • Fixed a regression in 8.3.0 where the correct exit code would not be issued during cypress run-ct while running in the Electron browser. Fixes #17752 and #17885.
  • Fixed a regression in 8.3.0 where Cypress would cause a SIGSEGV error on Mac when closing the Cypress app opened via cypress open. Fixes #17766.
  • The beforeinput event now correctly fires in Firefox during keyboard events. Fixes #17583.

Misc:

  • cy.document() typings now allow for the timeout option. Fixes #17695.
  • cy.title() typings now allow for the timeout option. Fixes #17781

Dependency Updates:

  • Upgraded electron from 13.1.7 to 13.2.0. Addressed in #17772.
  • Upgraded @cypress/request from 2.88.5 to 2.88.6. Addresses #17622.

8.3.0

Released 08/16/2021

Features:

  • The instructions for recording a run have been updated for some users. Addressed in #17317.

Performance:

  • We addressed an issue that increased CPU usage during video recording in Chrome 89+/Electron 12+. Fixes #16152.
  • Fixed a regression in 7.2.0 that would cause cy.visit() to take longer to fire its load event in some circumstances. Fixes #16671.

Bugfixes:

  • Fixed an issue that could cause intermittent OpenSSL errors when the local CA cert cache becomes corrupted. Fixes #8705.
  • Fixed a regression in 7.2.0 causing the menu bar of Cypress to not be clickable in Windows. Fixes #16323.
  • res.send of cy.intercept() will no longer override JSON-related content types. Fixes #17084.
  • The times option of cy.intercept now works properly with req.reply. Fixes #17139.
  • Fixed a regression in 8.0.0 where Cypress would always warn that chromeWebSecurity is set to "false" when it wasn't. Fixes #17614.

Dependency Updates:

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 89 to 91. Addressed in #17408.
  • Upgraded bundled Node.js version from 14.6.0 to 14.17.0. Addressed in #17408.
  • Upgraded electron from 12.0.0-beta.14 to 13.1.7. Addressed in #17408.
  • Upgraded url-parse from 1.5.1 to 1.5.2. Addressed in #17719.

8.2.0

Released 08/04/2021

Features:

  • You can now cache and restore cookies, localStorage, and sessionStorage in order to reduce test setup times by using cy.session(). The session API is experimental and can be enabled by setting the experimentalSessionSupport flag to true in your Cypress config. See our blog and the cy.session() doc for more detail.
  • The logging experience around HTTP requests has been updated.
    • fetch requests are always displayed in the Command Log, regardless of if experimentalFetchSupport is enabled.
    • Duplicate logs for XHRs, fetches, and cy.intercept() have been consolidated - Fixes #14843.
    • The user experience around the information displayed in the console when clicking on cy.intercept() request logs has been improved.
    • Request logs now indicate if a request has gone to the origin or if it has been stubbed by displaying a filled or empty circle in the request log.
    • Request logs now display information about if the request and/or response was modified by a cy.intercept().
    • The tooltip displayed when mousing over a request log now displays information about the matched cy.intercept()/cy.route() rules.
    • Fixed an issue where pending request logs were not ended between tests. Fixes #14655.
  • There's now a Cypress.currentTest property to access name the currently executing test via Cypress.currentTest.title and Cypress.currentTest.titlePath. Addresses #2972.

Bugfixes:

  • A "removing cookie failed" error will no longer throw when cookies are cleared in Firefox. Fixes #6375.
  • Cypress no longer throws the error "cannot read property split of undefined" in certain circumstances when application errors are thrown. Fixes #17378.
  • Cypress now properly runs the final test when nested in a suite with a before hook. Fixes #9026.
  • Fixed a regression in 8.0.0 where an error would longer throw when there is no /etc/passwd entry for the current user, such as in some Docker and GitHub Action setups. Fixes #17415.
  • Cypress now throws if a function is incorrectly passed as the second argument to cy.wait(). Fixes #17436.

8.1.0

Released 07/29/2021

Features:

  • When using experimentalStudio, you can now generate assertions in Cypress Studio by right clicking on an element. Addressed in #16295.
  • When searching specs in the Test Runner during end-to-end testing, characters that are not letters will be ignored and don't have to be typed. Addressed in #17346.

Performance:

  • The Test Runner's performance has been improved when running a large number of commands within a single test. Fixes #6783.

Bugfixes:

  • Add Yarn v2 pnp support to our default webpack processor. Fixes #8008 and #16111.
  • When running Cypress in global mode, an error will no longer be thrown when trying to add a new project to the Dashboard. Addressed in #17514.
  • The Test Runner will no longer crash in some instances when creating a new spec file from the GUI. #17430.

8.0.0

Released 07/19/2021

Summary:

We've made some updates to ensure a consistent run experience across browsers. Now all browsers run via cypress run run headlessly, with a device pixel ratio of 1, and a screen size of 1280x720 by default.

Breaking Changes:

Please read our Migration Guide which explains the changes in more detail and how to change your code to migrate to Cypress 8.0.

  • When running cypress run previous to 8.0, some browsers would launch headed while others were launched headless by default. Cypress now runs all browsers during cypress run as headless by default. Addresses #16832.
  • The default screen size when running a headless browser has been reverted back to 1280x720 pixels (pre 7.0 behavior). Addresses #16853.
  • When running the --headless Chrome browser via cypress run, the device pixel ratio will now be 1 by default, matching the behavior of all other browsers. This behavior can be overridden through the browser launch API. Addresses #17375.
  • Cypress now enforces version checks for browser launching and will error during cypress run and not allow opening the browser in cypress open when attempting to open unsupported browser versions. Cypress supports Chrome >= 64, Firefox >= 86, and Edge >= 79. Addressed in #17355.
  • Arguments returned from a chained function will no longer incorrectly be of type jQuery and instead have an any type. Fixes #16669.
  • The Cypress.ConfigOptions, Cypress.ResolvedConfigOptions and Cypress.RuntimeConfigOption types have been updated so that ConfigOptions match the JSON schema. Addressed in #17251.

Features:

  • You can now configure certificate authority (CA) and client certificates to use within tests on a per-URL basis via a clientCertificates configuration option. See Client certificates for more detail.
  • Setting the environment variable ELECTRON_RUN_AS_NODE now starts Cypress as a normal Node.js process rather than an Electron process. See Running headless tests without Xvfb for more details. Addresses #16505.

Bugfixes:

  • console.log and console.error called within the plugins file will now be captured in the stdout sent to the Cypress Dashboard, making it visible in Output logs in the Dashboard. Fixes #7434.
  • There are several fixes for cy.intercept() including:
    • The times option now works correctly with req.continue. Fixes #16821.
    • localhost is now accepted as a valid hostname in the RouteMatcher. Fixes #17015.
    • delay now works correctly with a statusCode of 204. Fixes #15188.
  • When using the experimental Cypress Studio, there should be a reduced occurrence of "Studio failed to save commands" error messages. Fixes #14767.
  • cy.invoke() now retains the proper this context on nested object methods. Fixes #3871.
  • We no longer trigger unnecessary snapshot re-renders when hovering over the Command Log. Fixes #17257.

7.7.0

Released 07/07/2021

Features:

  • When using experimentalStudio, Cypress Studio can now copy all commands generated to your clipboard. Addressed in #16912.

Bugfixes:

  • Cypress now respects preventScroll options passed to element.focus() calls within the application under test. Fixes #15294.
  • Using .contains(0) will now show the zero in the Command Log. Fixes #1119.
  • Cypress will no longer show a warning about allowed keys for the showedOnBoardingModal when running cypress open. Fixes #17095.
  • The Cypress Studio introduction modal will now display with the correct styling. Fixes #17102.
  • The types for .contains() now correctly allow for the includeShadowDom option. Fixes #17066.

Misc:

  • We updated the messaging when Cypress fails to start to be clearer that it's not always due to a dependency missing. Addresses #17112.

7.6.0

Released 06/23/2021

Features:

  • You can now override the default delay between typing characters for .type() with Cypress.Keyboard.defaults() or via test configuration. Addresses #566.
  • The experience when opening a new project via cypress open has been improved. Addressed in #15826.
    • The scaffolded example files have been updated to include examples tests of the TodoMVC project.
    • You can now easily delete all of the scaffolded example files directly from the Test Runner GUI.
    • There's now a button to create a new spec file when no spec files are found in the project.
    • A new onboarding banner with be present with helpful links for new users and new projects.
  • The incoming request object yielded to request handler functions passed to cy.intercept() (req) now has a req.query property, which is a getter/setter for the query parameters on the request URL. Addresses #16327.
  • You can now pass an ArrayBuffer as a request / response body with cy.intercept(). Addresses #16722

Bugfixes:

  • Cypress no longer hangs intermittently when using webpack 5. Fixes #15447.
  • It is no longer necessary to return the config from the plugins function when using the dev-server:start event for component testing. Fixes #16860.
  • cy.intercept() now correctly sets the response body as a string instead of an ArrayBuffer when it contains multi-byte characters. Fixes #16292.
  • cy.intercept() won't corrupt certain binary responses. Fixes #16722.
  • On Windows, the Cypress executable is now code signed by "Cypress.io, Inc.". This fixes spawn UNKNOWN errors when launching Cypress with code signing required by policy on Windows. Fixes #2543
  • We now warn on EPERM errors when accessing the project directory instead of erroring. Fixes #16933.
  • Cypress now better handles running when browsers with unconventional versions are present on the machine. Fixes #15485.
  • Expanded the types for CyHttpMessages.BaseMessage.headers to support the value being an array of strings. Fixes #16734.

Dependency Updates:

  • Added enquirer dependency. Fixes #16846.

7.5.0

Released 06/07/2021

Features:

  • The Test Runner has a new 'Docs' menu with links and prompts specific to helping you get started writing tests, set up in CI, and running tests in the Dashboard. Addressed in #16433.
  • cy.request() now accepts a generic in TypeScript for specifying the type of the request body. Addresses #9109.

Bugfixes:

  • Cypress will not longer crash with a hasBinary infinite recursive call. Fixes #16476.
  • The --config-file option now correctly handles absolute paths. Fixes #6136.
  • cy.location(<key>) will now retry if the remote location returns an empty string, which is possible during otherwise harmless redirects. Fixes #16463.
  • Cypress now passes a flag to Chrome browsers to prevent update notifications from displaying in some cases. Fixes #16693.
  • TypeScript will now properly error when attempting to use the chai <value>.should() syntax. Fixes #16548.

Dependency Updates:

  • Replaced deprecated listr with listr2. Addressed in #16663.

7.4.0

Released 05/24/2021

Features:

  • Cypress now detects and supports testing in the Chrome Beta browser. Addresses #16376.
  • There are new keyboard shortcuts to continue (c) and to go to the next test (n) when the Test Runner is paused via .pause() and to toggle auto-scrolling of the Test Runner (a). Addresses #248.

Bugfixes:

  • cy.request() can now send binary files in form data. Fixes #1647.
  • cy.request() can now send blob data. Fixes #6178.
  • Fixed an issue where cy.wait() could yield the incorrect result when used with cy.intercept() and several simultaneous requests. Fixes #16451.
  • Improved the way that cy.intercept() matchers are displayed in the Command Log when using RouteMatcher properties besides url and method. Fixes #9403.
  • cy.intercept() argument validation has been improved. Invalid hostnames and extra arguments passed to cy.intercept() now result in an error. Addressed in #16577.
  • cy.screenshot() no longer incorrectly captures parts of the Test Runner UI during component testing. Fixes #16543.
  • Spec files that containing spaces in the path will now properly open during cypress open-ct. Fixes #16278.
  • Cypress now correctly uses the componentFolder and testFiles values from returned from plugins in the component testing runner. Fixes #16424.
  • Video recordings in Chrome, Chromium, and Electron browsers will no longer drop frames, with the frequency increasing along with the length of the video. Fixes #16648.
  • Tests located outside of the projectRoot will now open in IDE and generate studio commands when saved. Fixes #16255.
  • config in the plugins file will now display in alphabetical order. Fixes #16564.

Dependency Updates:

  • Upgraded dependency-tree from 7.0.2 to 8.1.0. Addressed in #16464.
  • Upgraded extract-zip from 1.7.0 to 2.0.1. Fixes #6896

7.3.0

Released 05/10/2021

Features:

  • Component tests can now be launched via the Module API by passing testingType: 'component' via the new testingType property. The testingType will default to e2e. Addresses #16302.
  • cy.intercept() now accepts a times option in the RouteMatcher. times will specify the number of times that a particular cy.intercept() should be applied. Addresses #4460 and #8531.
  • cy.intercept() now accepts invocation using cy.intercept(url, routeMatcher, handler), where url is a regular expression. Previously, this only worked if url was a string. Addresses #16390.
  • Cypress will now automatically get environment variables for LayerCI when recording to the Dashboard. Addresses #16101.
  • Setting the env var DEBUG=cypress:server:record:ci-info will print commit information and CI provider information that's sent to the Dashboard as debug logs. Addresses #16236.
  • Cypress can now use the certificate authority specified in NPM config if CYPRESS_DOWNLOAD_USE_CA is specified. See "Using a custom CA" for more information. Addresses #8825.

Bugfixes:

  • Cypress will no longer incorrectly redirect the AUT window to /__/ when location.href is set to a relative path within the call stack of an XHR event handler. Fixes #3975 and #7439.
  • Cypress now properly handles when a form submit or anchor tag target is set to _top or _parent so that it no longer redirects the parent frame. Fixes #1244.
  • Fixed a regression in 6.5.0 that could cause Cypress to crash with a RangeError: Maximum call stack size exceeded at _deconstructPacket error. Most commonly, this occurred when handling network errors with cy.request(). Fixes #15101.
  • Fixed a regression in 7.0.0 that caused the Test Runner to crash with an ERR_INVALID_ARG_TYPE type error when testing a binary file upload. Fixes #15898 and #16223.
  • When verifying Cypress, we now listen for the 'close' event instead of the 'exit' event in an effort to fix some situations where the browser cannot be found even though it is on the system. Addressed in #16312.
  • Fixed a regression in 6.5.0 that caused a node warning about .then() only accepting functions to display. Fixes #15281.
  • cy.intercept() now adds a access-control-expose-headers: '*' header by default for CORS requests unless overridden. Fixes #15050.
  • Improved the way that cy.intercept() and cy.route() requests with multiple aliases are displayed in the command log. Addressed in #16382.
  • Cypress now correctly shows all .should('contain') assertions when chained after .should('be.visible'). Fixes #16006.
  • Cypress.cookies.debug(true) will now correctly show cookie-related messages on the console. Fixes #15032.
  • cy.log() will now show all arguments, not only the first 2. Fixes #16068.
  • .select() now correctly selects option elements with values that have &nbsp; characters. Fixes #16045.
  • The e2e and component configuration values will now correctly show when previewing resolved configuration in the Test Runner. Fixes #16282.
  • When passing the —quiet flag, Cypress will no longer print uploading output to Stdout. Fixes #16268.
  • When pressing the / hotkey in Firefox, Cypress will select the SpecList's SearchInput as it does in other browsers. Fixes #16309.
  • Cypress will now detect the default installation location of the Visual Studio Code editors on Windows machines. Fixes #15080.
  • Changing files extensions when creating a new test file should no longer add extra dots to the filename on Windows machines. Fixes #16131.

Dependency Updates:

  • Upgraded classnames from 2.2.6 to 2.3.1. Addressed in #8337.
  • Upgraded color-string from 1.5.4 to 1.5.5. Addressed in #16362.
  • Upgraded lodash from 4.17.19 to 4.17.21. Addressed in #16406.
  • Upgraded registry-js from 1.13.0 to 1.15.0. Addressed in #16409.
  • Upgraded url-parse from 1.4.7 to 1.5.0. Addressed in #16408.

7.2.0

Released 04/26/2021

Features:

  • You can now navigate through folders in the Test Runner using the Tab keyboard input and open or close the folder's content with the Enter & Space keyboard inputs. Addresses #3741.

Performance:

  • Fixed a regression in 7.0.0 that caused tests to run slowly, especially when run with constrained CPU resources. Fixes #15853.
  • Fixed a regression in 7.0.0 causing decreased performance in Chromium browsers due to requesting screencast frames when video is disabled. Fixes #16030.

Bugfixes:

  • Fixed a regression in 7.0.0 that caused the Test Runner to crash with an ERR_INVALID_ARG_TYPE type error. We now correctly detect a utf8 request body with multi-byte Unicode characters. Fixes #15901.
  • Reusing cy.intercept() aliases will now work as expected. Fixes #15823.
  • Fixed an issue in 7.0 where users could get a misleading "must pass a handler as the 3rd argument" error when using cy.intercept. Fixes #16117.
  • cypress run-ct no longer hangs on Windows machines. Fixes #15976.
  • Hovering over a command log without a snapshot will no longer cause the error Cannot read property 'name' of null. Fixes #15816.
  • We now throw an error when attempting to .select() an <option> within a disabled <fieldset>. Fixes #5951.
  • .type() will no longer change the value attribute of button-like inputs with type button, submit, reset, image, radio, or checkbox. Fixes #15913.
  • Specs will now load when using a relative directory for componentFolder outside of the root project when specifying --project. Fixes #16053.
  • The search input will now display when there are many component spec files. Fixes #16089.

Misc:

  • Lodash types have been updated. Addressed in #15860.
  • Types for the selector playground have been added. Addressed in #15834.
  • Cypress.Cookies.defaults() now returns the correct type instead of void. Addresses #15426.
  • .then() will show the correct type when a collection of HTMLElements is provided. Addressed in #15869.
  • Improved types for cy.intercept(). Addressed in #16167.

Dependency Updates:

  • Downgraded the Chromium browser version used during cypress run and when selecting Electron browser in cypress open from 89.0.4348.1 to 89.0.4328.0. This was done to address a performance regression introduced in 7.0.0. Addressed in #16113.
  • Upgraded systeminformation from 5.3.1 to 5.6.4. Addressed in #15819.
  • Replaced lolex with @sinonjs/fake-timers. Addressed in #15595.

7.1.0

Released 04/12/2021

Features:

  • The events before:spec, after:spec, before:run, and after:run now fire in interactive mode in addition to run mode. This requires the experimentalInteractiveRunEvents flag to be enabled. Addressed in #15787.

Bugfixes:

  • Viewport configuration set in cypress.json is now correctly applied in the Component Test Runner. Fixes #15899.
  • Running specs on Windows is now supported in the Component Test Runner. Fixes #15842.
  • Fixed an issue where crashes in Cypress would cause a misleading "Unknown signal: true" error after the actual crash message. Fixes #15943.
  • Fixed an issue introduced in 7.0.0 where requests with responses stubbed via cy.intercept(routeMatcher, staticResponse) would still be sent to the destination server. Fixes #15841.

7.0.1

Released 04/07/2021

Bugfixes:

  • Fixed a regression in 7.0.0 that caused the test runner not to check for updates. Fixes #15829.
  • The component testing spec list search input no longer throws an exception when hitting Enter. Addressed in #15833.
  • The preferred file opener modal no longer appears behind the command log. Addressed in #15831.
  • Cypress no longer crashes in certain circumstances when running in Docker without --ipc=host. Fixes #15814 and #350.
  • Node.js warnings are no longer incorrectly printed to stderr in production builds of Cypress. Addressed in #15817.
  • Cypress no longer prints a warning to stdout when the video cannot be found after a run. Addressed in #15828.
  • A warning is no longer displayed when running a TypeScript spec without a tsconfig.json file present. Addressed in #15828.

Misc:

  • The "New Spec File" in the Desktop GUI has a less pronounced style. Addressed in #15835.

7.0.0

Released 04/05/2021

Summary:

🎉 Introducing the Cypress Component Test Runner - now in alpha. Today's release includes a brand new test runner designed to replace your Node-based component tests. Our Component Test Runner tests your components in the browser, just like a user would. And, since it runs in the browser, you get to debug your components using your favorite developer tools. Read our Component Testing Guide for more details.

Breaking Changes:

Please read our Migration Guide which explains the changes in more detail and how to change your code to migrate to Cypress 7.0.

  • We introduced several breaking changes to cy.intercept(). See the cy.intercept() docs for full usage examples. Breaking changes:
    • Request handlers supplied to cy.intercept() are now matched starting with the most recently defined request interceptor. This allows users to override request handlers by calling cy.intercept() again. This matches the previous behavior that was default in cy.route(). Addresses #9302.
    • cy.intercept() now automatically parses more JSON MIME types, including 'application/vnd.api+json'. You can now remove JSON.parse(req.body) or JSON.parse(res.body) from some tests that previously required it. Addresses #14763.
    • Falsy values (with the exception of undefined) supplied as the body of a StaticResponse to cy.intercept() will now be JSONified and sent as the body. Previously, an empty string was sent instead. Addresses #15234 and #14205.
    • The matchUrlAgainstPath RouteMatcher property has been removed from cy.intercept().
    • The "substring match" from cy.intercept() URL matching has been removed. Previously, a URL would match if it contained the supplied string anywhere. Now, the URL (including querystring) only matches if it is an equality match or a minimatch.
    • res.delay() and res.throttle() have been renamed to res.setDelay() and res.setThrottle(), respectively. Addresses #15700.
    • cy.route2() was previously aliased to cy.intercept(). Now the alias cy.route2() has been removed. Please update usage of cy.route2() to cy.intercept(). Addressed in #14709.
  • Component tests have been migrated to use a dedicated test runner and are bundled differently. See the Migration Guide for full examples on how to migrate. Addressed in #14479.
    • Component tests will not be executed when running cypress open or cypress run. Now, they need to be executed by running cypress open-ct or cypress run-ct. Addressed in #15701.
    • experimentalComponentTesting must be removed from yoru configuration file, cypress.json by default, or it will throw an error. Addressed in #15701.
    • The file:preprocessor event is no longer used to compile component tests. Now, a dev-server:start event must be registered.
  • Cypress now catches uncaught errors and fails the test even if the application under test has defined window.onerror. Addresses #8802.
  • Cypress now fails tests if there is an unhandled promise rejection in the application under test. Unhandled rejections will trigger the uncaught:exception event with the promise as the third argument. Addresses #243.
  • Cypress now throws an error if the application under test redirects more than 20 times. The number of times allowed to redirect is configurable via the redirectionLimit config. Addresses #14445.
  • The default preprocessor now targets a more modern version of ECMAScript. Addressed in #15274.
  • We now enable contextIsolation by default in the Electron browser. You can override this option if needed within the before:browser:launch API. Addressed in #15493.
  • Cypress.moment() has been removed. Please migrate to a different datetime formatter. See our recipe for example replacements. Addresses #8714.
  • The bundled Node.js version was upgraded from 12.18.3 to 14.16.0. This could change the behavior of code within the pluginsFile when using the bundled Node.js version of Cypress. Addressed in #15292.
  • Installing Cypress on your system now requires Node.js 12+. Addresses #9545.
  • The default headless browser window size has been increased to 1920x1080 pixels to capture High-definition videos and screenshots. Addresses #15752, #15730, and #15481.

Features:

  • A command log entry is now displayed when there is an uncaught exception or unhandled rejection. Addresses #8236.
  • We added several features to cy.intercept(). See the cy.intercept() docs for full usage examples. Addressed in #14543. New features:
    • There are new events on the req object for cy.intercept() including before:response, response, and after:response.
    • Response handlers (supplied via event handlers or via req.continue(cb)) supplied to cy.intercept() will be called in reverse order until res.send is called or until there are no more response handlers.
    • A new option, middleware, has been added to the RouteMatcher type. If true, the supplied request handler will be called before any non-middleware request handlers.
    • A new function, req.continue(cb), is available on request objects yielded by cy.intercept(). It is functionally the same as req.reply(cb) - the request will stop propagating to other event handlers, will be sent outgoing, and the response will be handled by cb.
    • cy.intercept() can now be called with a new overload: cy.intercept(url, routeMatcher, handler). routeMatcher will be merged with url, and the handler is required.
  • cy.visit() can now visit pages with application/xhtml* content-type. Addresses #15738.
  • You can now pass runner specific configuration in order to pass different configuration values to component tests versus e2e tests. Addressed in #15526.
  • There's a new keyboard shortcut (ctrl/cmd + f) to search spec files in the Test Runner based on your OS. Addresses #6229.
  • You can now create a new spec file directly from the Test Runner in the Desktop. Addressed in #15335.
  • cy.tick() now accepts a log option. Addresses #15180.
  • The Cypress proxy now adds a keep-alive header to all proxy responses. Addressed in #15292
  • Cypress no longer forces specific NODE_OPTIONS. Addressed in #15292

Bugfixes:

  • The response.body of cy.intercept() is now correct after stubbing a response using res.send({ fixture }) in a req.continue callback or a before:response or response handler. Addressed in #14543.
  • Fixed an issue where only the first matching alias for a route would yield a response object on cy.wait(). Fixes #14522.
  • .click() will no longer fail with "coordsHistory must be at least 2 sets of coords" when specifying { multiple: true }. Fixes #3738.
  • Cypress now checks visibility correctly when an element has CSS "position: sticky". Fixes #14938.
  • After selecting a project in global mode and clicking the back button, Cypress will no longer crash. Fixes #15089.
  • Errors Refused to apply style are gone from the console in open-ct during Component Testing. Addressed in #15661.
  • Some memory leaks were fixed in @cypress/vue. Addressed in #15275.

Misc:

  • The types for set-cookie allow string[], so the header's type has been changed to reflect this. Addresses #15419.
  • The type definition for cy.writeFile() now allows 4 arguments. Addresses #15353.
  • .then() will show the correct type when raw HTMLElements are provided. Addresses #14875
  • The Cypress Studio icon now displays properly for tests with long titles. Addresses #15182.
  • There were some minor improvements made to the UI when setting up a project in the Test Runner. Addressed in #15665.

Dependency Updates

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 87 to 89. Addressed in #15292.
  • Upgraded bundled Node.js version from 12.18.3 to 14.16.0. Addressed in #15292.
  • Upgraded electron from 11.3.0 to 12.0.0. Addressed in #15292.

6.9.1

Released 4/5/2021

This release contains the same features as 6.8.0. It was published to provide a non-breaking alternative to 6.9.0, which was mistakenly published with breaking changes.

6.9.0

Released 4/5/2021

This release was mistakenly published with breaking changes, is deprecated, and should not be used. Upgrade to 6.9.1 or 7.0.0, or stay on 6.8.0.

6.8.0

Released 3/17/2021

User Experience:

  • Improved the specs list user interface with a new icon set and accessibility features when in Component Testing mode (alpha). Addressed in #15513

Bugfixes:

  • Cypress will no longer exit with an error when recording a run to the Dashboard with empty specfiles. Fixes #15512.
  • When using experimentalStudio, Cypress Studio the icon to add commands will now fully display on long test titles. Fixes #15182.

6.7.1

Released 3/15/2021

Bugfixes:

  • Interacting with an element that requires scrolling within an element with scroll-behavior: smooth no longer fails Cypress's actionability check. Fixes #15453.
  • A regression in 6.7.0 has been fixed so that the projectId will be written correctly to the cypress.json file on initial creation without an extra config object. Fixes #15497.

6.7.0

Released 3/15/2021

Features:

  • The experimentalRunEvents configuration flag has been removed. You can now listen to before:run, after:run, before:spec and after:spec events in the plugins file without needing the experimentalRunEvents configuration option. See the before:run, after:run, before:spec and after:spec docs for more information. Addressed in #15276.
  • When canceling a run from the Dashboard, previously only parallelized runs would cancel correctly. Now all recorded runs will respect cancelation and exit early. Addresses #1691.
  • Test configuration is now captured and sent when recording to the Dashboard. Addresses #15487.
  • Cypress now sends test details to the Dashboard at the beginning of a recorded run, so historical test code and other data can be provided to the Dashboard upfront. Addressed in #14925.
  • The full stack trace from errors thrown in the preprocessor are now displayed. Addressed in #15198.
  • Configuration values which are changed at runtime prior to tests running are now properly shown as resolved from the spec code within the Module API to indicate where the change originated from. Addresses #15486.

Bugfixes:

  • FFmpeg will no longer error ("width not divisible by 2") during video recording in Chromium-family browsers, including Chrome, Electron, and Edge. Fixes #3491 and #15300.
  • cy.wait() no longer falsely returns a timeout when the user aborts an XHR. Fixes #9549.
  • .clear() and .type('{selectall}{del}') now behave the same when they're used against elements that contain text inputs. Fixes #8447.
  • When using experimentalStudio, Cypress Studio now records typing by using the value of the input rather than the keys that were pressed. Studio also no longer records pressing special keys (such as arrows or ctrl) except for Enter. Fixes #15023.
  • Empty jQuery objects are now properly shown in error messages in the Command Log. Fixes #14279.
  • Length assertions on DOM elements now properly show the user-defined assertion message if specified. Fixes #14484.
  • Cypress no longer scrolls on mouse down event, fixes #8279.

Misc:

  • We updated the UI when connecting a project to the Dashboard. Addressed in #14877.
  • "Test recordings" recorded to the Cypress Dashboard are now referred to as recorded "test results." Addresses #15376.
  • Errors shown from the plugins file now display top-aligned. Addressed in #15347.

Dependency Updates:

  • Upgraded electron from 11.2.3 to 11.3.0. Addressed in #15201.

6.6.0

Released 2/18/2021

Features:

  • Cypress now extracts and sends CodeFresh CI default variables when recording to the Dashboard. Addresses #4609

Dependency Updates:

  • Upgraded ramda to version 0.27.1. Addressed in #14958.

6.5.0

Released 2/15/2021

Performance:

  • Improved the startup time of cypress open and cypress run. Addresses #15075.

Bugfixes:

  • Fixed an issue where tests would display as failed if an event (such as an XHR request) failed after the test was already completed. This only affects the display of the test and not what was reported in run mode, so it would not have had an effect on suites running in CI. Addresses #14978.
  • Fixed a regression introduced in 6.4.0 that caused Electron to crash when opening outside links in the Command Log. Addresses #14912.
  • Fixed an issue where browser paths with double backslashes would not work as expected on Windows. Addresses #14719.
  • Fixed Microsoft Edge browser detection when passing a path on Windows. Addresses #14716.
  • Fixed an issue where the types for Cypress.on did not support chaining. Addresses #14991.
  • Fixed an issue where, when installing two Cypress instances simultaneously, the downloaded .zip could become corrupted and break the install process. Addresses #4595.

Misc:

  • Expanded search bar in desktop GUI to fill the entire width. Addresses #14830.
  • Added autoEnd to the types for LogConfig. Addresses #9590.
  • We collect more variables from Bitbucket pipelines to correctly display the pull request information in the Dashboard. Addresses #15081.

Dependency Updates:

  • Upgraded electron to version 11.2.3. Addresses #15056.

6.4.0

Released 2/1/2021

Features:

  • There's now a Command Log entry in the Test Runner for when a file is downloaded. Addresses #14749.

Deprecations:

  • The delayMs option for cy.intercept() has been renamed to delay. delayMs will still work, but it is deprecated and will be removed in a future release. Addresses #14822.

Bugfixes:

  • Fixed an issue causing a webpack compilation error when a browserslist is present in project root. Addresses #8864.
  • Fixed an issue with cy.intercept() where aliases set via req.alias containing a period character would not work as expected. Addresses #14444.
  • Fixed an issue where delays set using cy.intercept() would not work as expected. Addresses #14446 and #14511.
  • Reverted a change to how the Chrome DevTools Protocol is established. Instead of using stdio and then falling back to TCP, Cypress now only uses TCP to try to connect to Chrome DevTools Protocol. Addresses #14819.
  • We now better handle spec paths containing special characters so they properly show in the code frame and work when interacting via your IDE. Addresses #14659.
  • We addressed several issues with the experimental Cypress Studio. To enable the Cypress Studio you can set experimentalStudio to true in your Cypress configuration. Issues addressed:
    • Cypress Studio now prompts to start adding commands after visiting an inputted url. Addresses #14688.
    • Empty .type() commands will no longer be generated when tabbing through inputs. Addresses #14684.
    • Cypress Studio no longer prompt to enter a URL if the test is in an errored state. Addresses #14686.
    • Cypress Studio now reloads tests when watchForFileChanges is false. Addresses #14744.
    • An empty .click() command will no longer be added before .type() in Cypress Studio when it is followed by typed characters. Addresses #14685.
    • Cypress Studio will now use the correct selector for an element even if the click event changed the selectors. Addresses #14658.
    • Multi-select selects are now supported in Cypress Studio. Addresses #14743.
    • There's an improved UI for command failures within Cypress Studio. Addresses #14691.
    • The Selector Playground is now closed automatically when Cypress Studio is opened. #14689.

Misc:

  • The "no specs found" error now displays which directory it searched for specs. Addresses #14532.
  • More types for the resolved config property have been added. Addresses #14392.

Dependency Updates:

  • Upgraded @cypress/get-windows-proxy to version 1.6.2. Addressed in #14711.
  • Upgraded electron to version 11.2.1. Addressed in #14764.
  • Upgraded recast to version 0.20.4. Addressed in #14623.
  • Upgraded registry-js to version 1.13.0. Addressed in #14668.
  • Upgraded semantic-release to version 17.2.3. Addressed in #14713.
  • Upgraded systeminformation to version 4.31.1. Addressed in #14715.

6.3.0

Released 1/19/2021

Features:

  • Cypress Studio provides a visual way to generate tests within the Test Runner, by recording interactions against the application under test. Cypress Studio is an experimental feature that can be enabled by adding the experimentalStudio attribute to your configuration, cypress.json by default. Address #73.
  • You can now test file downloads in Cypress without the download prompt displaying. Any files downloaded while testing file downloads will be stored in the downloadsFolder which is set to cypress/downloads by default. The downloadsFolder will be deleted before each run unless trashAssetsBeforeRuns is set to false. Addresses #949.

Bugfixes:

  • When an uncaught exception is thrown outside a suite with an .only, the error will now correctly display in the Command Log. Fixes #14455.
  • Cypress will no longer crash when no record key is provided to the --key flag when followed by other CLI flags. Fixed #14593.
  • Extra screenshots will no longer be taken when tests are retried when there is a failure in an afterEach hook. Fixes #9209.
  • Having waitForAnimations set to false no longer affects whether Cypress fires actions on inner elements. Fixes #14370.
  • We fixed a regression in 5.0.0 that would cause string CYPRESS_ prefixed env variables containing commas to be parsed as multiple values. Fixes #8818.
  • We fixed a regression in 4.9.0 where asserting have.value on an undefined subject would throw an error. Fixes #14359.
  • We updated the CDP connection to attempt to use the stdio transport first with Chrome 72 and above, before falling back to using TCP. This should remediate issues causing sporadic "Cypress failed to make a connection to the Chrome DevTools Protocol after retrying" errors. Fixes #6540, #7450, #8674, and #8986.

Misc:

  • We removed several Chrome flags that are no longer supported. Addressed in #14582.
  • You can now open the actively running spec file in your IDE. Addressed in #14521.

Dependency Updates:

  • Replaced deprecated node-sass with sass. Addressed in #14415.
  • Upgraded debug from 4.1.1 to 4.3.1. Addressed in #14583.
  • Upgraded electron from 11.0.3 to 11.2.0. Addressed in #14567.
  • Upgraded electron-builder from 22.8.0 to 22.9.1. Addressed in #14493.
  • Upgraded shell-env from 3.0.0 to 3.0.1. Addressed in #14622.
  • Upgraded uuid from 8.2.0 to 8.3.2. Addressed in #14170.

6.2.1

Released 1/4/2021

Bugfixes:

  • Test retries, when retrying on several failed tests, will no longer cause hanging during cypress run. Fixes #9040.
  • multipart/form-data is no longer wrongly encoded when using cy.intercept(). This should prevent Unexpected end of multipart data errors on the back end service where the request was pointing to. Fixes #9359.
  • cy.contains() no longer throws an error when a single quote is used inside its argument when RegExp. Fixes #8626.
  • Passing capture: 'runner' to a cy.screenshot() command inside .within() now screenshots the entire Test Runner as expected. Fixes #14253.
  • Cypress.dom.isJquery() now always returns a boolean instead of undefined sometimes. Fixes #14278.
  • calledOnceWith and calledOnceWithExactly sinon matchers no longer throw an error when used within Cypress. Fixes #9644.
  • We now pass --disable-backgrounding-occluded-windows as a default flag to Chrome to prevent backgrounding rendering when the Cypress window is occluded. Fixes #9604.

Misc:

  • After login, if a name is undefined on your profile, the Test Runner will show the profile's email and link to instructions to update the name. Addresses #14288.

Dependency Updates:

  • Upgraded devtools-protocol from 0.0.734984 to 0.0.839267. Addressed in #14353.
  • Upgraded electron from 11.0.3 to 11.1.1. Addressed in #14352.

6.2.0

Released 12/21/2020

Features:

  • You can now listen to before:run, after:run, before:spec and after:spec events in the plugins file when setting the experimentalRunEvents configuration option to true. See the before:run, after:run, before:spec and after:spec docs for more information. Addressed in #9646, #14178 #14238 and #14263.
  • The Timed out retrying error message now displays the amount of time Cypress retried. Addresses #5781.
  • The RouteMatcher argument for cy.intercept() has a new matchUrlAgainstPath property. When set to true, Cypress will match the supplied url against incoming paths. Addressed in #14241.

Bugfixes:

  • Passing a URL as a string or RegExp to cy.intercept() will automatically set matchUrlAgainstPath to true. This means that the supplied string or RegExp will be matched against the path if matching against the URL fails. Fixes #9379 and #14256.
  • Getting an alias of cy.intercept() using cy.get() will no longer always yield null. Fixes #9306.
  • cy.intercept() will now automatically responds to CORS preflight requests (HTTP OPTIONS requests) that match defined routes. Fixes #9599.
  • Response errors from forceNetworkError can now be awaited using cy.intercept() and cy.wait(). Fixes #9062.
  • Using cy.log() inside .then() no longer breaks the subject value in the command chain. Fixes #8084.
  • Using Cypress.Commands.overwrite to overwrite .then() now preserves the proper this context and sets aliases correctly. Fixes #5101.
  • Using Cypress.Commands.overwrite to overwrite cy.route() or cy.intercept() and wait on its alias now properly works. Fixes #3890 and #9580.
  • Cypress no longer fails to find specs if you set the fixtures folder to be the same as the integration folder. Fixes #14226.
  • Cypress no longer fails to show error code frames if the spec filename has a space in it, fixes #7553.

Misc:

  • scrollBehavior is now an allowed type when passed as test configuration. Addresses #9643.
  • The FileObject type for the file argument of the file:preprocessor event now includes the EventEmitter type. Addresses #9276.

Dependency Updates:

  • Upgraded electron from 11.0.2 to 11.0.3. Addressed in #9409.

6.1.0

Released 12/07/2020

Features:

  • There's a new scrollBehavior configuration option that controls the viewport position when an element is scrolled prior to action commands. Possible values are 'top', 'bottom', 'center', 'nearest', and false, with 'top' being the default. scrollBehavior: false disables scrolling altogether. scrollBehavior can be specified in global configuration, test configuration or individual action commands via options. Addresses #871 and #4356.
  • The Tests tab in the Test Runner now orders folders before files. This matches the ordering of most IDEs' file explorers. Addresses #7334.

Bugfixes:

  • Responses stubbed from cy.intercept() will now automatically set Access-Control-Allow-Origin and Access-Control-Allow-Credentials to permissive values unless explicitly overridden. Fixes #9264.
  • The Cannot read property "fireChangeEvent" of undefined error will no longer throw during a race condition when using cy.intercept(). Fixes #9170.
  • HTTP responses that cannot have a body (like HTTP 304 and HTTP 204) can now be awaited using cy.intercept(). Fixes #8934 and #8999.
  • We fixed an issue where HTTP redirects could not be awaited using cy.intercept() unless dynamically intercepted. Addressed in #9097.
  • Tests will no longer hang in certain situations when there's an error in a before() hook. Fixes #9162.
  • We no longer strip / from URLs when they are explicitly passed with query paramaters. Fixes #9360.
  • Fixed the regression in Cypress.dom.isVisible behavior for elements with position: fixed, addresses #8998 and #9031.

Deprecations:

Deprecations still work as before but will be removed from Cypress in a future release. We encourage you to update your code now to remove uses of deprecations.

  • Cypress.moment has been deprecated and will be replaced in a future release. Consider migrating to a different datetime formatter. Addresses #8714.

Misc:

  • We collect more environment variables from Bitbucket to better detect reruns. Addresses #9309.
  • waitForAnimations and animationDistanceThreshold types are now included for all actionable commands. Addresses #8854.

Dependency Updates:

  • Upgraded mocha-junit-reporter from 1.23.1 to 2.0.0. Addressed in #9528.

6.0.1

Released 11/30/2020

Bugfixes:

  • Chromium based browsers on version 87 will no longer show recorded videos as frozen or blank. Fixes #9265.
  • We fixed a regression introduced in 5.0.0 that would cause an Option 'sourceMap' cannot be specified with option 'inlineSourceMap' error to throw when setting sourceMap in your tsconfig. Fixes #8477.
  • cy.screenshot() no longer throws an "offset" is out of range error when Cypress attempts to crop the image. Fixes #2034.
  • cy.screenshot() types won't mistakenly display the command as deprecated. Fixes #9303.
  • Lower-cased HTTP methods can now be used with cy.intercept(). Fixes #9313.

6.0.0

Released 11/23/2020

Summary:

Cypress now offers full network stubbing support with the introduction of the cy.intercept() command (previously cy.route2()). With cy.intercept() your tests can intercept, modify and wait on any type of HTTP request originating from your app. See our guide on Migrating cy.route() to cy.intercept().

Breaking Changes:

Please read our Migration Guide which explains the changes in more detail and how to change your code to migrate to Cypress 6.0.

  • Cypress now always throws an error when asserting on an element that doesn't exist in the DOM (unless you're asserting that the element should not.exist). Assertions such as not.visible, not.contains, not.have.class, etc will now fail when used on non-existent DOM elements. Addresses #205.
  • DOM elements where the CSS style (or ancestors) are opacity: 0 are no longer considered visible. However these are still considered actionable and any action commands used to interact with the element will perform the action. This matches browser's implementation on how they regard elements with opacity: 0. Addresses #4474.
  • The type yielded by cy.wait(alias) has changed in order to support use of cy.intercept(). Addressed in #9266.
  • The experimentalNetworkStubbing option has been removed and made the default behavior. You can safely removed this configuration option. Addressed in #9185.
  • When using .type() and .click() on elements inside a contenteditable element, the events are now properly triggered on the inside elements. This may cause unintended consequences if you were relying on the previous behavior. Addressed in #9066.
  • We removed several deprecation errors around APIs that were removed in versions of Cypress prior to 4.0.0. This will not cause any changes for anyone upgrading from a 4.0+ version of Cypress. For a full list of all APIs affected see #8946.
  • We updated our HTTP status codes and reason phrases to match Node.js http.STATUS_CODES. If you have code that relies on a reason phrase, then this could affect you. Addressed in #8969.
  • JSON request and response bodies captured by cy.intercept() are now automatically parsed, removing the need to manually do JSON.parse. Addressed in #9280.

Deprecations:

Deprecations still work as before but will be removed from Cypress in a future release. We encourage you to update your code now to remove uses of deprecations.

  • cy.server() and cy.route() have been deprecated. In a future release, support for cy.server() and cy.route() will be removed. We encourage you to use cy.intercept() instead. See our guide on Migrating cy.route() to cy.intercept(). Addressed in #9185.
  • experimentalFetchPolyfill has been deprecated. We encourage you to use cy.intercept() to intercept requests using the Fetch API instead.
  • cy.route2() was renamed to cy.intercept(). We encourage you to update usages of cy.route2() to use cy.intercept(). Addressed in #9182.

Features:

  • The new cy.intercept() command can be used to manage the behavior of HTTP requests at the network layer. Addressed in #9182.
  • We now pass —disable-dev-shm-usage to the Chrome browser flags by default. This will write shared memory files into /tmp instead of /dev/shm. If you're passing this flag in your plugins file, you can now remove this code. Addresses #5336.
  • A warning is now displayed when passing invalid configuration keys through the CLI. Addresses #428.
  • The cypress version command now also displays the current Electron and bundled Node versions. Addresses #9180.
  • The cypress version command now accepts a --component flag that allows you to print the version of specific components of Cypress. ie Electron, Node, etc. Addresses #9214.

Bugfixes:

  • We fixed a regression introduced in 3.5.0 that would cause .type() to not type the entire string when focus was called away from the target element. Fixes #9254.
  • .type() and .click() now properly work on elements inside a contenteditable element. Fixes #2717 and #7721.
  • We fixed a regression introduced in 5.6.0 that would cause the Test Runner to crashes and display a white page when switching tabs while tests are running. Fixes #9151.
  • Fixed an issue where Content-Length for cy.route2 request bodies could be incorrectly recalculated. Fixes #9166.

Documentation Changes:

Misc:

  • Added the type of redirects and changed redirectedToUrl optional for Response types. Addresses #9275.

Dependency Updates

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 85 to 87. Addressed in #9222.
  • Upgraded bundled Node.js version from 12.16.3 to 12.18.3. Addressed in #9222.
  • Upgraded electron from 10.1.5 to 11.0.2. Addressed in #9222.

5.6.0

Released 11/09/2020

Features:

  • You can now dynamically add aliases for requests intercepted via cy.route2(). See an example. Addresses #387.
  • You can now run all integration specs or all component specs separately (or a filtered list of specs) by clicking the appropriate button in the Test Runner in the Tests tab. Addresses #8203.
  • Added a new modifier syntax to cy.type(). You can now type shortcuts like {ctrl+z}. Addressed in #5694.
  • We now show a modal with release notes when available when there is a new version of Cypress. Addressed in #9006.
  • In the Test Runner's Settings and Runs tab you can now quickly copy the project id configuration and record key using a copy to clipboard icon. Addresses #9002.

Bugfixes:

  • Fixed a regression introduced in 4.12.0 where snapshotting caused images to load too many times. Fixes #8679.
  • Using cy.visit() on sites with content-type of text-html followed by parameters (like text/html;charset=utf-8) will no longer throw an error about visiting a site with an invalid content-type. Fixes #8506
  • The Cannot access 'continueSent' before initialization error will no longer throw when using cy.route2(). Fixes #8926.
  • Awaiting a request body when providing a static response stub in cy.route2() should now work properly. Addressed in #9059.
  • The way that intercepted cy.route2() requests are displayed in the Command Log has been improved, including showing the progress bar correctly. Addresses #9053.
  • The Cannot read property 'replace' of undefined error will no longer throw when attempting to generate the stack trace from an error thrown in the application. Fixes #7915.
  • Stack traces in the Command Log originating from application errors where the location is unavailable will no longer show as a clickable link to open in IDE. Fixes #9106.
  • When using the fixture: prefix as a stubbed response to cy.route(), JSON fixtures containing only a number or boolean will no longer throw an error. Fixes #4899.
  • Fixed an issue causing failed subresource integrity checks for external scripts. Fixes #8983, #9049, and #8992.

Misc:

  • Typings for .invoke() and .its() now allow for a timeout option. Addresses #9079.
  • Typings for cy.task() now allow for parameterizing the task return type. Addresses #7136.
  • A clearer error is printed during cypress cache list when no cached versions are found. Addresses #6303.

Dependency Updates:

  • Upgraded commander from ^4.1.1 to ^5.1.0. Addressed in #8979.
  • Upgraded semver from 6.3.0 to 7.3.2. Addressed in #9068.
  • Upgraded systeminformation from 4.26.9 to 4.27.11. Addressed in #8979.
  • Removed node-webkit-updater. This should remove some security warnings that were shown during install. Addresses #8314.

5.5.0

Released 10/26/2020

Features:

  • cy.viewport() has a new macbook-16 preset. Addresses #8889.
  • .type() now fires the beforeInput event during typing. Note: Firefox does not support the beforeinput event. Addresses #7088.

Bugfixes:

  • Updated the Cypress proxy layer to proxy HTTPS traffic from non-AUT origins. Addressed in #8827.
    • This fixed an issue with cy.route2() where HTTPS requests to a non-AUT origin would not be intercepted as expected.
  • cy.route2() now properly handles passing a method as its first argument. Fixes #8729.
  • Fixed an issue with cy.route2() where a "Cannot set property response of undefined" error would occasionally occur. Fixes #8858.
  • Headers field names passed to cy.route2() now case-insensitively match against the field names of incoming HTTP requests. Fixes #8921.
  • Routes that stub fixtures for binary resources (including images) made with cy.route2() now serve the correct mime-type and content. Fixes #8623.
  • When experimentalNetworkStubbing is enabled, using cy.visit() to URLs that redirect and set Transfer-Encoding: chunked will no longer fail in Cypress with a "Parse Error". Fixes #8497.
  • cypress.run() through the Module API now has a status property in the results matching the correct CLI types ("failed" or "finished"). Addresses #8798.
  • When a value containing an e character is passed to the --ci-build-id flag, Cypress now properly reads it as a string. Fixes #8874.

Misc:

  • Updated type definitions to allow for passed either runMode or openMode to retries alone. Addresses #8869.

Dependency Updates:

  • Upgraded electron from 10.1.3 to 10.1.5. Addressed in #8927 and #8975.
    • This addresses a Chrome security issue, CVE-2020-15999. Addresses #8922.
  • Upgraded color-string from 1.5.3 to 1.5.4. Addressed in #8945.
  • Upgraded pretty-bytes from ^5.3.0 to ^5.4.1. Addressed in #8964.

5.4.0

Released 10/14/2020

Features:

  • You can now run cypress cache prune to delete all installed Cypress versions from the cache except for the currently-installed version. Addresses #5972.
  • There's a new --size option for the cypress cache list command that prints the sizes of the Cypress cache folders. Addresses #6404.
  • For video recordings of runs, there is now a video chapter key for each test. If your video player supports chapters, you can move to the start of each test right away. Addresses #3626.
  • In Windows, you can now append the browser type to the end of the path passed to the --browser flag, like cypress open --browser C:/User/App/browser.exe:chrome, to help detect the browser type. Addresses #6389.
  • cy.viewport() has new iphone-7, iphone-8, and iphone-se2 presets. Addressed in #8624
  • When there is a new version of Cypress available, the update modal has a new design with 'copy to clipboard' buttons to copy the upgrade commands. Addressed in #8751.
  • The Command Log can be hidden by passing the CYPRESS_NO_COMMAND_LOG=1 environment variable during cypress open or cypress run to be used as a tool to debug performance issues. Addressed in #8689.

Bugfixes:

  • We fixed a regression in 5.8.0 where the chromeWebSecurity option had no effect in Electron. Fixes #8399.
  • Tests will no longer hang and now properly throw when there is an error thrown from a test:after:run event listener. Fixes #2271 and #8701.
  • When a command is chained after .within() and cy.get() is called inside it, the scope will no longer permanently change. Fixes #2106, #4672, #4757, and #5183.
  • Dual commands like cy.contains() when used after an .each() commands now query as expected. Fixes #4921.
  • / is no longer added to the URL when baseUrl has param(s). Fixes #2101.
  • When using cy.route2() the route handler timeouts will no longer leak into other tests and cause random failures. Addressed in #8727.
  • The request.body is now available when using cy.wait() on an aliased cy.route2() route which had not been intercepted. Fixes #8695.
  • Re-running failed build steps in Bitbucket will no longer create a new run on the Cypress Dashboard. Fixes #8720.
  • The forced garbage collection timer will no longer display when using a version of Firefox newer than 80. Fixes #8725.
  • The browser dropdown is no longer covered when opened from the Runs tab in the Test Runner. Fixed in #8745.
  • Fixed an issue where preprocessor-related plugins would cause tests not to run and a duplicate instance of Cypress to be spawned. Fixes #8634.

Misc:

  • Improved type definitions for cy.route2(). Addresses #8694 and #8782.
  • The Test Runner now shows an indicator in the footer and a toast notification if there is a new version available. Addressed in #8702 and #8803.

Dependency Updates:

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 83 to 85. Addressed in #8406.
  • Upgraded bundled Node.js version from 12.14.1 to 12.16.3. Addressed in #8406.
  • Upgraded electron from 9.2.1 to 10.1.3. Addressed in #8406.
  • Upgraded firefox-profile from 2.0.0 to 4.0.0. Addressed in #8786.
  • Upgraded node-forge from 0.9.0 to 0.10.0. Addressed in #8800.

5.3.0

Released 9/28/2020

Features:

  • Firefox support is now out of beta! 🎉 Firefox 80 and newer are now officially stable when used with Cypress. Addresses #8241.
    • Versions of Firefox older than 80 can still be used, but will be subject to the firefoxGcInterval workaround. The desktop GUI will display a warning if such versions are used.

Bugfixes:

  • Fixed a bug where cy.route2() would not automatically JSONify an empty array handler. Addresses #8532.
  • Fixed a bug where objects yielded by using cy.wait on a cy.route2() alias would not always have a response property. Addresses #8536.
  • Fixed an issue where cy.route2() routes would not be able to intercept requests to HTTPS destinations on a different origin. Addresses #8487.
  • Fixed an issue where subjects became undefined after certain assertion failures. Addresses #5763.
  • Fixed an issue where a cy.task with no arguments passed would receive null as the first argument instead of undefined. Addresses #5913.
  • Fixed an issue preventing users from passing the config-file argument when starting cypress through the node module API. Addresses #8632.
  • Fixed an issue where cy.visit()s to a relative URL containing .. would not work. Addresses #5090.
  • Fixed an issue where Mocha hooks could still be triggered after the Test Runner was manually stopped. Addresses #8621.
  • Fixed an issue where cy.setCookie failed when given a cookie name with a __Host- prefix. Addresses #8261.
  • Fixed an issue where a misleading error was displayed when test code threw an exception with a non-Error object. Addresses #7870.

Misc:

  • The proxy now omits the Content-Security-Policy-Report-Only header the same way that it does for Content-Security-Policy. Addresses #7936.
  • Added a status property to CypressRunResult objects. Addresses #8580.
  • Updated types to no longer use deprecated Mocha interfaces. Addresses #5795.
  • Passing an empty string to CYPRESS_INSTALL_BINARY now takes precedence over npm config. Addresses #8488.

5.2.0

Released 9/15/2020

Features:

  • Added the configuration option includeShadowDom for enabling shadow DOM querying globally, per-suite, per-test, or programmatically. Addresses #8442.
  • Added a followRedirect option to request interception with cy.route2(), allowing redirects to be followed before continuing to response interception. Addresses #7967.
  • Added the capability to specify delayMs and throttleKbps when stubbing static responses with cy.route2(). Addresses #7661.
  • Installing Cypress pre-releases no longer requires setting the CYPRESS_BINARY_INSTALL environment variable. Addresses #8482.

Performance Improvements:

  • Fixed a performance issue which led to CPU bottlenecking during Cypress runs. Addresses #8012 and #8297.

Bugfixes:

  • Fixed an issue where using TypeScript path aliases in the plugins file would error. Addresses #8555.
  • Fixed an issue where using cy.contains() within a shadow root would not yield the correct element. Addresses #8494.
  • Fixed an issue where querying the shadow DOM in a cy.within() callback would throw the error root.getRootNode is not a function. Addresses #8478.
  • Fixed an issue with cy.type() {moveToStart}/{moveToEnd} special characters moving the cursor to the current line instead of the entire text editable when typing in a contenteditable element. Addresses #8465.
  • Fixed an issue where typing into a manually-focused number input would prepend the number instead of appending it. Addresses #7170.
  • cy.type() now fires a KeyboardEvent event instead of an Event event. Addresses #6125 and #5650.
  • Fixed long selectors in the selector playground text input overflowing other page elements. Addresses #8247 and #4184.
  • Fixed an issue where assertions on cy.getCookie() would be called twice. Addresses #6672.
  • Fixed an issue that caused the "Open in IDE" button on hooks and tests not to appear in Firefox. Addresses #8257.
  • Fixed an issue causing Cypress to hang on test retry in run mode with certain assertions. Addresses #8363.

Documentation Changes:

  • Fixed examples of delaying and throttling responses with cy.route2(). Addresses #8489.
  • Added examples of using a response function with cy.route2(). Addresses #8468.
  • Removed unmaintained languages. English docs is the only supported language by the Cypress team. We greatly appreciate the contributions from the community for other languages, but these docs are largely stale, unmaintained, and partial. The Cypress team will seek out more scalable docs internalization implementation in the future.

Misc:

  • The experimentalShadowDomSupport configuration flag has been removed. It is no longer necessary to enable shadow DOM testing.
  • Improved the error message when the subject provided to cy.shadow() is not a shadow host. Addresses #8530.
  • Improved the error message when the Cypress binary is not executable. It now recommends trying to clear the cache and re-install. Addresses #8397.
  • Added missing type declarations for the cy.route2() command.
  • Updated the type declaration for Cypress.Commands.add(), adding Promise to the list of allowed return types. Addresses #7807.

5.1.0

Released 9/1/2020

Features:

  • Introducing experimental full network stubbing support 🎉.
    • With experimentalNetworkStubbing enabled, the cy.route2 command is available. Addressed in #4176.
    • By using cy.route2(), your tests can intercept, modify, and wait on any type of HTTP request originating from your app, including XMLHttpRequests, fetch requests, beacons, and subresources (like iframes and scripts).
    • Outgoing HTTP requests can be modified before reaching the destination server, and the HTTP response can be intercepted as well before it reaches the browser.
    • See the cy.route2() docs for more information on how to enable this experiment.
  • cy.trigger() now accepts an eventConstructor option for specifying the constructor with which to create the event to trigger. Addresses #5650.

Bugfixes:

  • Improved warnings for when user is exceeding test limits of the free Dashboard plan. Addresses #8409.
  • Added retries to TestOptions types. Addresses #8405.
  • Added types for specType field on Cypress.spec. Addresses #8256.
  • Fixed a typo in type definitions. Addresses #8417.
  • Cypress now resolves and loads tsconfig.json for TypeScript projects starting from the plugins directory. Addresses #8359.
  • Fixed an issue where, if npm config's noproxy is set, unexpected behavior could occur. Addresses #8287.
  • Fixed an issue where nesting hooks within other hooks caused the test to never finish. Addresses #8350.
  • Fixed an issue in where tests would unexpectedly fail with a "Can't resolve 'async_hooks'" error. Addresses #8375.
  • Fixed an issue where return values from blob utils were mistaken for promises and could cause errors. Addresses #8365.
  • Fixed an issue with loading .mjs files. Addresses #8361.
  • Fixed an issue causing tests to run slowly in Electron. Addresses #7930.
  • Using .should with only chainer assertions will now throw an error. Addresses #883.
  • cy.trigger() now includes the view property in the event object when appropriate. Addresses #3686.
  • Fixed an issue where Cypress would not detect newer 64-bit installations of Chrome on Windows. Addresses #8425.
  • Fixed an issue where Cypress would not detect per-user Firefox installations on Windows. Addresses #8432.

Dependency Updates:

  • Updated dependency iconv-lite to version 0.6.2. Addresses #8387.
  • Updated dependency command-exists to version 1.2.9. Addresses #8388.
  • Updated dependency electron to version 9.2.1. Addresses #8436.

5.0.0

Released 8/19/2020

Summary:

Cypress now includes support for test retries! Similar to how Cypress will retry assertions when they fail, test retries will allow you to automatically retry a failed test prior to marking it as failed. Read our new guide on Test Retries for more details.

Breaking Changes:

Please read our Migration Guide which explains the changes in more detail and how to change your code to migrate to Cypress 5.0.

  • The cypress-plugin-retries plugin has been deprecated in favor of test retries built into Cypress. Addresses #1313.
  • The Cypress.Cookies.defaults() whitelist option has been renamed to preserve to more closely reflect its behavior. Addressed in #7782.
  • The blacklistHosts configuration has been renamed to blockHosts to more closely reflect its behavior. Addressed in #7622.
  • The cy.server() whitelist option has been renamed to ignore to more closely reflect its behavior. Addresses #6642.
  • libgbm-dev is now a requirement to run Cypress on Linux. Addressed in #7791.
  • Values yielded by cy.setCookie(), cy.getCookie(), and cy.getCookies() will now contain the sameSite property if specified. Addresses #6892.
  • The experimentalGetCookiesSameSite configuration flag has been removed, since this behavior is now the default. Addresses #6892.
  • The return type of the Cypress.Blob methods arrayBufferToBlob, base64StringToBlob, binaryStringToBlob, and dataURLToBlob have changed from Promise<Blob> to Blob. Addresses #6001.
  • Cypress no longer supports file paths with a question mark ? or exclamation mark ! in them. We now use the webpack preprocessor by default and it does not support files with question marks or exclamation marks. Addressed in #7982.
  • For TypeScript compilation of spec, support, and plugins files, the esModuleInterop option is no longer coerced to true. If you need to utilize esModuleInterop, set it in your tsconfig.json. Addresses #7575.
  • Cypress now requires TypeScript 3.4+. Addressed in #7856.
  • Installing Cypress on your system now requires Node.js 10+. Addresses #6574.
  • In spec files, the values for the globals __dirname and __filename no longer include leading slashes. Addressed in #7982.

Features:

  • There's a new retries configuration option to configure the number of times to retry a failing test. Addresses #1313.
  • .click(), .dblclick(), and .rightclick() now accept options altKey, ctrlKey, metaKey, and shiftKey to hold down key combinations while clicking. Addresses #486.
  • You can now chain .snapshot() off of cy.stub() and cy.spy() to disabled snapshots during those commands. For example: cy.stub().snapshot(false). Addresses #3849.

Bugfixes:

  • The error Cannot set property 'err' of undefined will no longer incorrectly throw when rerunning tests in the Test Runner. Fixes #7874 and #8193.
  • Cypress will no longer throw a Cannot read property 'isAttached' of undefined error during cypress run on Firefox versions >= 75. Fixes #6813.
  • The error Maximum call stack size exceeded will no longer throw when calling scrollIntoView on an element in the shadow dom. Fixes #7986.
  • Cypress environment variables that accept arrays as their value will now properly evaluate as arrays. Fixes #6810.
  • Elements having display: inline will no longer be considered hidden if it has child elements within it that are visible. Fixes #6183.
  • When experimentalShadowDomSupport is enabled, .parent() and .parentsUntil() commands now work correctly in shadow dom as well as passing a selector to .parents() when the subject is in the shadow dom. Fixed in #8202.
  • Screenshots will now be correctly taken when a test fails in an afterEach or beforeEach hook after the hook has already passed. Fixes #3744.
  • Cypress will no longer report screenshots overwritten in a cy.screenshot() onAfterScreenshot option as a unique screenshot. Fixes #8079.
  • Taking screenshots will no longer fail when the screenshot names are too long for the filesystem to accept. Fixes #2403.
  • The "last used browser" will now be correctly remembered during cypress open if a non-default-channel browser was selected. Fixes #8281.
  • For TypeScript projects, tsconfig.json will now be loaded and used to configure TypeScript compilation of spec and support files. Fixes #7006 and #7503.
  • reporterStats now correctly show the number of passed and failed tests when a test passes but the afterEach fails. Fixes #7730.
  • The Developer Tools menu will now always display in Electron when switching focus from Specs to the Test Runner. Fixes #3559.

Documentation Changes:

Misc:

  • Cypress now uses the webpack preprocessor by default to preprocess spec files.
  • The Runs tab within the Test Runner has a new improved design when the project has not been set up or login is required. Addressed in #8141.
  • The type for the Window object returned from cy.window() is now correct. Addresses #7856.
  • The type definition for Cypress's ApplicationWindow can now be extended. Addresses #7856.
  • The type definition for reporterOptions has been added. Addresses #7877.

Dependency Updates

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 80 to 83. Addressed in #7791.
  • Upgraded bundled Node.js version from 12.8.1 to 12.14.1. Addressed in #7791.
  • Upgraded chalk from 2.4.2 to 4.1.0. Addressed in #7650.
  • Upgraded cli-table3 from 0.5.1 to 0.6.0. Addressed in #7650.
  • Upgraded electron from 8.3.1 to 9.2.0. Addressed in #7791 and #8235.
  • Upgraded execa from 1.0.0 to 4.0.2. Addressed in #7650.
  • Upgraded express from 4.16.4 to 4.17.1. Addressed in #8179.
  • Upgraded fs-extra from 8.1.0 to 9.0.1. Addressed in #7650.
  • Upgraded log-symbols from 3.0.0 to 4.0.0. Addressed in #7650.
  • Upgraded tmp from 0.1.0 to 0.2.1. Addressed in #7650.

4.12.1

Released 8/5/2020

Bugfixes:

  • The error Cannot set property 'err' of undefined will no longer incorrectly throw when rerunning tests in the Test Runner. Fixes #7874.
  • Skipping the last test before a nested suite with a before hook will now correctly run the tests in the suite following the skipped test. Fixes #8086.

Dependency Updates:

  • Upgraded md5 from 2.2.1 to 2.3.0. Addressed in #8161.
  • Upgraded electron-context-menu from 0.15.1 to 2.2.0. Addressed in #8180.

4.12.0

Released 8/3/2020

Features:

  • Now you can control whether screenshots are automatically taken on test failure during cypress run by setting screenshotOnRunFailure in your configuration. Addresses #5029.
  • The pluginsFile now has access to a readonly version property within the config object that returns the current Cypress version being run. This will allow plugins to better target specific Cypress versions. Addresses #6352.
  • During cypress open, you can now run a subset of all specs by entering a text search filter and clicking 'Run n tests'. Addresses #6581.

Bugfixes:

  • position: fixed elements that have a parent with pointer-events: none will now correctly evaluate as visible. Fixes #6675.
  • Applications using custom elements will no longer trigger infinite XHR request loops. Fixes #1068.
  • When snapshotting the DOM, Cypress no longer causes attributeChangedCallback to be triggered on custom elements. Fixes #7187.
  • Spec files containing + characters now properly run in Cypress. Fixes #5909.
  • When using the fx shortcut in cy.route(), an error is now thrown when the fixture file cannot be found. Fixes #7818.
  • Cypress no longer thrown Cannot read property '__error' of null error when passing a file containing null content to cy.fixture(). Fixes #8010.
  • Values containing exponential operators passed to --env via the command line are now properly read. Fixes #6891.
  • The "Open in IDE" button no longer disappears from hooks when the tests are manually rerun. Fixes #8094.
  • When experimentalSourceRewriting is enabled, AST rewriting will no longer return an output before the body is done being written. This would happen when the response body was too large and the response would be sent while the body was still being modified. Fixes #8043.
  • When using .type(), Cypress now properly types into an input within an iframe that auto focuses the input. Fixes #8111.

Misc:

  • Dependencies for our cypress npm package are no longer pinned to a specific version. This allows the use of npm audit fix to fix security vulnerabilities without needing a patch release from Cypress. Addresses #8046.
  • We now collect environment variables for AWS CodeBuild when recording to the Dashboard. Addressed #8101.
  • Types inside Module API are now accessible via the CypressCommandLine namespace. Addresses #7309.
  • We added more type definitions for the .should() command. Addresses #5573.
  • Cookie command's expiry property type is now a Number instead of a String. Addresses #8144.
  • There are some minor visual improvements to the Test Runner's Command Log when hovering, focusing and clicking on hook titles and pending tests. Addressed in #8153.

Dependency Updates:

  • Upgraded jimp from 0.13.0 to 0.14.0. Addressed in #8102.
  • Upgraded moment from 2.26.0 to 2.27.0. Addressed in #8122.

4.11.0

Released 7/21/2020

Features:

  • You can now pass an ensureScrollability: false option to .scrollTo() to skip checking whether the element is scrollable. Addresses #1924.
  • cy.clock() now accepts Dates as well as a Number for now. Fixes #7786.
  • The Module API has a new cypress.cli.parseRunArguments function to assist in parsing user-supplied command line arguments using the same logic as cypress run uses. Addesses #7760.

Bugfixes:

  • Running multiple specs within Firefox during cypress run on Windows will no longer fail trying to make a connection to the browser. Fixes #6392.
  • Cypress will no longer throw a Cannot read property 'isAttached' of undefined error during cypress run on Firefox versions >= 75. Fixes #6813.
  • Fixed an issue where Cypress tests in Chromium-family browsers could randomly fail with the error "WebSocket is already in CLOSING or CLOSED state." Fixes #7180.
  • Taking a screenshot of an element that changes height upon scroll will no longer throw an invalid for option "size" error. Fixes #6099.
  • Setting viewportHeight or viewportWidth from within the test configuration now properly changes the viewport size for the duration of the suite or test.
  • Setting deep objects and arrays on config within the pluginsFile now sets the values correctly. Fixes #7959.
  • The progress bar for cy.wait() now reflects the correct requestTimeout and responseTimeout of the command. Fixes #7881.
  • The command's progress bar will not longer restart when its parent test is collapsed in the Command Log. Fixes #7912.
  • Key value pairs sent to ELECTRON_EXTRA_LAUNCH_ARGS as key=value will now be properly read in. Fixes #7994.
  • Stubbed responses responding with an empty string to cy.route() now correctly display as 'xhr stub' in the Test Runner's Command Log. Fixes #8018.
  • Quickly reclicking the "Run All Tests" button in the Test Runners' Command Log will no longer throw errors about undefined properties and the tests will no longer hang. Fixes #7968.

Misc:

  • The error messages thrown from pluginsFile and supportFile now mention that .ts extensions are supported. Addresses #7940.
  • The style when focusing on tests in the Command Log has been updated. Addresses #7855.

Dependency Updates:

  • Upgraded @benmalka/foxdriver from 0.4.0 to 0.4.1. Addressed in #8040.
  • Upgraded firefox-profile from 1.3.1 to 2.0.0. Addressed in #8000.
  • Upgraded fix-path from 2.1.0 to 3.0.0. Addressed in #8028.
  • Upgraded human-interval from 0.1.6 to 1.0.0. Addressed in #8031.
  • Upgraded lodash from 4.17.15 to 4.17.19. Addressed in #7954.
  • Upgraded plist from 2.1.0 to 3.0.1. Addressed in #8045.
  • Upgraded proxy-from-env from 1.0.0 to 1.1.0. Addressed in #7900.
  • Upgraded resolve from 1.13.1 to 1.17.0. Addressed in #7989.
  • Upgraded systeminformation from 4.21.1 to 4.26.9. Addressed in #7975.
  • Upgraded uuid from 3.3.2 to 8.2.0. Addressed in #7976, #8002, and #8011.

4.10.0

Released 7/7/2020

Features:

  • You can open a before, beforeEach, after, and afterEach hook definition in your IDE from the Test Runner's Command Log by clicking the Open in IDE button. Addresses #7793.
  • before, beforeEach, after, and afterEach hook definitions now display separately in the Test Runner's Command Log when defined in separate hook definitions. Addresses #7779.
  • You can now open a spec file directly from the Tests tab in the Test Runner by clicking the Open in IDE button. Addresses #7713

Bugfixes:

  • HTTP requests taking longer than the default responseTimeout will no longer be prematurely canceled by the Cypress proxy layer. Fixes #6426.
  • Using Cypress commands to traverse the DOM on an application with a global parent variable will no longer throw Illegal Invocation errors. Fixes #6412.
  • When experimentalShadowDomSupport is enabled, using .type() on an input in the Shadow DOM will not result in an error. Fixes #7741.
  • When experimentalShadowDomSupport is enabled, checking for visibility on a shadow dom host element will no longer hang if the host element was the foremost element and had an ancestor with fixed position. Fixes #7893.
  • Debug logs from the @benmalka/foxdriver module will no longer appear if any DEBUG environment variable was set. Fixed #7723.

Misc:

  • We made some minor UI updates to the Test Runner. Addresses #7732 and #7803.

Dependency Updates:

  • Upgraded recast from 0.18.8 to 0.19.1. Addressed in #7898.

4.9.0

Released 6/23/2020

Features:

  • An animated progress bar now displays on every command in the Command Log indicating how long the command has left to run before reaching its command timeout. Addresses #7642.
  • There is now an experimentalFetchPolyfill configuration option. When this option is true, Cypress will automatically replace window.fetch with a polyfill that Cypress can spy on and stub. Addresses #7710.
  • You can now pass a --quiet flag to cypress run to silence any Cypress specific output from stdout. Addresses #7714.

Bugfixes:

  • cy.wait() now correctly resolves when waiting for XHR requests that contain resource-like text in the XHR's query params or hash (like .js, .html, .css). #7280.
  • We fixed a regression in 4.6.0 where errors thrown from the application under test as strings would not be correctly handled. Fixes #7590.
  • We fixed a regression in 4.8.0 where .click() would hang if the subject had a shadow root and experimentalShadowDomSupport was not enabled. Fixes #7679.
  • We fixed a regression in 4.6.0 so that .should('have.value') now properly asserts against <progress>, <meter> or <li> element's values. Fixes #7603.
  • Cypress no longer responds with 413 responses during a recorded cypress run when the stdout is too large. Fixes #7548.
  • We fixed an issue where Cypress could exit successfully even with failing tests when launched in global mode. Fixes #7755.
  • Assertion logs now properly display as parent commands in the Command Log regardless of what is in the beforeEach hook. Fixes #7731.
  • When experimentalShadowDomSupport is enabled, querying shadow dom in certain situations will no longer cause the error Cannot read property 'length' of undefined during cypress run. Fixes #7676.
  • Highlighting of elements upon hover of a command in the Command Log are now visible when targeting absolute positioned elements. Fixes #7762.
  • cypress run will no longer crash when provided an empty string to the --project flag. Fixes #7743.

Misc:

  • There is now a loading state to indicate when tests are loading in the Command Log. Addresses #7700.
  • The type definitions for fixturesFolder, pluginsFile, screenshotsFolders and videoCompression have been updated to allow false TypeScript types. Addresses #7654.
  • The type definitions for cy.wait(ms) now correctly yield the type of the previous subject. Addresses #7682.
  • The type definitions now allow for the 'key' keyword when chaining off 'any' or 'all' assertion chainers. Addresses #7665.

Dependency Updates:

  • Upgraded arch from 2.1.1 to 2.1.2. Addressed in #7672.
  • Upgraded eventemitter2 from 4.1.2 to 6.4.2. Addressed in #7705 and #7707.
  • Upgraded getos from 3.1.1 to 3.2.1. Addressed in #7685.
  • Upgraded is-installed-globally from 0.1.0 to 0.3.2. Addressed in #7703.
  • Upgraded jimp from 0.12.0 to 0.13.0. Addressed in #7618.
  • Upgraded moment from 2.24.0 to 2.26.0. Addressed in #7718.
  • Upgraded signal-exit from 3.0.2 to 3.0.3. Addressed in #7738.

4.8.0

Released 6/8/2020

Features:

Bugfixes:

  • Upon domain navigation, before and after hooks defined in completed suites no longer erroneously rerun. Fixes #1987.
  • Errors thrown within root level after hooks now correctly display in the Test Runner's Command Log. Fixes #2296.
  • We fixed a regression in 4.6.0 where an XHR response without a body would cause Cypress to throw Cannot read property '__error' of null. Fixes #7518.
  • We fixed a regression in 4.6.0 where using cy.visit() to an authenticated URL would error with Request cannot be constructed from a URL that includes credentials: /__cypress/runner/./wasm/mappings.wasm Fixes #7481.
  • We now properly load code from the pluginsFile or supportFile when they are TypeScript files. Fixes #7459.
  • utf-8 characters now properly display within error code frames. Fixes #7507.
  • Errors thrown in a cy.on('fail', fn) fail handler now display a stack trace and code frame pointing to the origin of the error. Fixes #7512.
  • .click() now properly clicks on wrapped inline elements when the first child element in the parent element has no width or height. Fixes #7343 and #7012.
  • cy.wrap() now properly respects the timeout option. It also better handles situations when passed a promise that never resolves. Fixes #5980.
  • When experimentalSourceRewriting is enabled, Cypress will no longer exit with SIGABRT in certain situations. Fixes #7572.
  • We fixed a regression in 3.8.0 where the "Tests" button in the Test Runner wouldn't take you back to the tests list in all browsers. Fixes #5948.
  • Using the S shortcut during .pause() no longer does anything. This prevents the Test Runner from getting into a 'stuck' state. Fixes #6867.

Misc:

  • The design of errors and some iconography displayed in the Test Runner's Command Log have been updated. Addresses #7499, #7542 and #7563.
  • The commands in the Test Runner's Command Log now display in the same casing as the original command. Addresses #5773.
  • The navigation links in the Test Runner now display the correct CSS styles when focused. Addresses #7491.
  • Cypress.config() now has TypeScript types for the taskTimeout option. Addresses #7531.
  • TypeScript types for cy.screenshot() options and Cypress.log() have been updated to be more accurate. Addresses #7445.
  • TypeScript types for Cypress.automation have been added. Addresses #7519.
  • We now display a more accurate error message when passing a browser to the --browser flag that is not supported by Cypress. Addresses #6979.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #7588 and #7591.

Dependency Updates:

  • Upgraded chrome-remote-interface from 0.28.1 to 0.28.2. Addressed in #7615.
  • Upgraded electron from 8.3.0 to 8.3.1. Addressed in #7599.

4.7.0

Released 5/26/2020

Features:

  • cy.request() now supports an encoding option that can be used to set the encoding of the response body, defaulting to utf-8. Addresses #2029 and #3576.

Bugfixes:

  • We fixed a regression in 4.6.0 where the address bar of the application under test would disappear when scrolling commands ran and the application under test would visually shift after taking screenshots. Fixes #7443 and #7466.
  • We fixed a regression in 4.6.0 where test runs could hang when loading spec files with source maps. Fixes #7464.

Misc:

  • We now display a more descriptive error message when the plugins file does not export a function. Addresses #6611.

4.6.0

Released 5/20/2020

Features:

  • Errors in the Test Runner now display a code frame to preview where the failure occurred with the relevant file, line number, and column number highlighted. Clicking on the file link will open the file in your preferred file opener and highlight the line and column in editors that support it. Addresses #3762.
  • Cypress now utilizes source maps to enhance the error experience. Stack traces are translated so that your source files are shown instead of the generated file that is loaded by the browser. Cypress will include an inline source map in your spec file. If you modify the preprocessor, ensure that inline source maps are enabled to get the same experience. Users of @cypress/webpack-preprocessor should upgrade to v5.4.1 or later of the package which will correctly inline source maps. Addresses #881, #1761 and #3966.
  • Cypress now enables AST-based JS/HTML rewriting when setting the experimentalSourceRewriting configuration option to true. Addresses #5273.
  • Number arguments passed to have.text, have.id, have.data, have.value, and have.attr assertions chainers are now automatically cast to strings for comparison. Addresses #7314.

Bugfixes:

  • Default TypeScript options are now set to module: commonJS which Node.js and the browser expect. This fixes a situation where setting a different module in a tsconfig.json would cause errors to throw if you had export, import or async keywords in your code. Fixes #7005, #7011, #7043, and #7151.
  • When experimentalSourceRewriting is enabled, setting location or location.href to a relative href, or using location.replace or location.assign with a relative href will no longer navigate the AUT to the wrong URL. Fixes #3975 and #3994.
  • When experimentalSourceRewriting is enabled, the use of window.top and window.parent will no longer cause the AUT to break out of the Cypress iframe. Fixes #5271 and #1467.
  • When experimentalSourceRewriting is enabled, calls to window.frames, window.parent.frames, and other frames will no longer point to the wrong reference after being proxied through Cypress. Fixes #2664.
  • When experimentalSourceRewriting is enabled, scripts using the integrity attribute for sub-resource integrity (SRI) will now load after being proxied through Cypress. Fixes #2393.
  • When experimentalSourceRewriting is enabled, the use of document.location to set the URL will no longer navigate the AUT to the wrong URL. Fixes #7402.
  • Type definitions will no longer conflict when running Cypress in a project with Jest. Fixes #3536.
  • We increased the timeout for launching Firefox from 2.5 seconds to 50 seconds. Previously, users hitting this limit would encounter a "cannot open socket" error; now, the error will be wrapped. Fixes #7159.
  • .click will now click in the correct coordinates when either x or y coordinate options are zero. Fixes #7319.
  • Cypress no longer displays onError is not a function when a browser can't connect. Fixes #7217.
  • You can now pass the force: true option to .select() to select options within a disabled <select>. Addresses #107.
  • We now throw an error when attempting to .select() an <option> within a disabled <optgroup>. Fixes #7226.
  • We fixed a regression in 4.3.0 where the message output during errors were not formatted correctly. Fixes #6924.
  • Using Cypress._.capitalize now correctly behaves the same as Lodash's capitalize method. Fixes #7222.
  • When experimentalComponentTesting is enabled, clicking on a component spec now watches the correct file without assuming it is an integration file. Fixes #7244.
  • Firefox video recording no longer crashes Cypress when running very short spec files. Fixes #6408.
  • Applications containing a DOM element with an id attribute containing 'jquery' will no longer throw an error during cy.visit(). Fixes #6193.
  • Long errors generated when compiling or bundling the test file are now horizontally scrollable. Fixes #6898.

Misc:

  • Cypress no longer requires write access to the root of the project, it instead will display a warning when no write access is given. Addresses #1281.
  • We increased the timeout for launching Chrome from 20 seconds to 50 seconds. Addressed in #7372.
  • We increased the timeout for macOS or Linux to exit from a --version command when looking for available browsers from 5 seconds to 30 seconds. Addressed in #7366.
  • We improved error handling when Cypress launches Chromium-family browsers. Addresses #6518.
  • We now export Cypress.ConfigOptions types as a partial of the full options interface. Addresses #7238.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #7162, #7216, #7227, #7320, #7232, and #7345.

Dependency Updates:

  • Upgraded @cypress/browserify-preprocessor from 2.2.2 to 2.2.3. Addressed in #7291.
  • Upgraded cookie-parser from 1.4.4 to 1.4.5. Addressed in #7389.
  • Upgraded cypress-multi-reporters from 1.2.4 to 1.4.0. Addressed in #7431.
  • Upgraded electron from 8.2.3 to 8.3.0. Addressed in #7236 and #7387.
  • Upgraded image-size from 0.7.4 to 0.8.3. Addressed in #7236.
  • Upgraded jimp from 0.9.3 to 0.12.0. Addressed in #7408.
  • Upgraded return-deep-diff from 0.3.0 to 0.4.0. Addressed in #7292.

4.5.0

Released 4/28/2020

Features:

  • Cypress now supports the execution of component tests using framework-specific adaptors when setting the experimentalComponentTesting configuration option to true. For more details see the @cypress/react and @cypress/vue repos. Addresses #5922 and #6968.

Bugfixes:

  • Custom Mocha reporters will now correctly use the version of Mocha bundled with Cypress. Fixes #3537 and #6984.
  • We better account for word boundaries in application scripts when modifyObstructiveCode is true. Fixes #7138.
  • Fixed an issue where iterators in TypeScript were not properly transpiled. Fixes #7098.

Misc:

  • The update window in the Test Runner now encourages yarn users to yarn upgrade Cypress instead of yarn add to help prevent installing 2 versions of Cypress when using yarn workspaces. Addressed in #7101.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #7031 and #7097.

Dependency Updates:

  • Upgraded electron from 8.2.0 to 8.2.3. Addressed in #7079.

4.4.1

Released 4/20/2020

Bugfixes:

  • Cypress can now launch on systems where Chromium is installed via Snapcraft. Fixes #7020.
  • We now check whether the mouseup event's target element is detached before issuing the click event during .click(). Fixes #6923.
  • We fixed a regression in 3.8.1 where the Test Runner could send an undefined organization ID during project setup when the default organization is preselected. Fixes #7013.
  • We fixed a regression in 4.4.0 that caused projects to include bundled TypeScript. Fixes #7036.
  • Fixed an issue where sites that set Feature-Policy: document-domain 'none' headers would fail to load in Cypress. Fixes #6480.

Misc:

  • We fixed some extra spacing displaying below the project nav in the Test Runner. Addresses #7023
  • The typings for run results when using the Module API now indicate they can be null or undefined. Addresses #6126.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #7004.

4.4.0

Released 4/13/2020

Features:

  • TypeScript test files are now supported without using special preprocessors plugins. Addresses #1859.

Bugfixes:

  • We fixed an issue where Cypress could crash with a This socket has been ended by the other party error when testing applications that make use of WebSockets. Fixes #6458.
  • Uncaught errors thrown from within application or test code now display their proper stack trace. Fixes #6964.
  • Assertion errors now include a stack trace that includes the calling code. Fixes #6969.
  • We now clone the options object passed into Cypress commands so that they're not mutated and receive the proper options. Fixes #3171.
  • We fixed an issue where invalid Set-Cookie values could cause requests to fail with a cannot read property key of undefined error. Now, invalid Set-Cookie values will be ignored. Fixes #6890.

Misc:

  • Cypress no longer hides output from cypress --version, cypress version, cypress cache path, or cypress cache list commands when npm log level is silent or warn. Addresses #2705.
  • The cy.task() error message is now more specific about the promise resolution value required. Addresses #6241.

Dependency Updates:

  • Upgraded http-proxy from 1.17.0 to 1.18.0. Addressed in #6934.

4.3.0

Released 3/30/2020

Features:

  • Errors shown in the Test Runner have a new design including an expandable stack trace, better highlighting of code elements, and 'Learn more' links that link to relevant Cypress documentation. This is part of our larger improvements to error display with more exciting features to come. Addresses #3762.
  • When you open a Cypress project, clicking on the Settings tab and clicking into the Experiments panel will display the experimental features that are available and whether they are enabled for your project.
  • Added support for setting cookie sameSite values via cy.setCookie(). Addresses #2437.
  • Added experimental support for adding sameSite values to the objects yielded from cy.setCookie(), cy.getCookie(), and cy.getCookies(). Users can enable this by setting the experimentalGetCookiesSameSite configuration value to true. In Cypress 5, this will be the default. Addresses #2437.
  • Added support for the SameSite cookie attribute in cy.request(), cy.visit(), and proxied HTTP requests. Addresses #6757.
  • When an assertion is retried (using .should()) and fails, it now shows the diff in the stdout. Addresses #6722.

Bugfixes:

  • Fixed a regression in 4.2.0 where cypress installation could fail if Git is not installed. Fixes #6752.
  • Fixed a regression in 3.5.0 where certain HTTP requests could fail with Parse Error: Invalid header value char or Parse Error: Header overflow. Fixes #5602.
  • Fixed a regression in 4.2.0 where Electron deprecation warnings were printed to stderr in open mode. Fixes #6750.
  • Cookies set with a Domain containing an unknown TLD are now sent along for all requests. For example, a cookie like foo=bar; Domain=.cypress.test will now be sent during cy.request() to http://local.cypress.test. Fixes #6628.
  • We fixed a situation where a cross-origin errors could incorrectly throw in Chrome. Fixes #5270.
  • Visibility checks against vue-fragment elements no longer throw an unexpected error. Fixes #6745.
  • The stack trace is now properly shown in the console when clicking the command for tests having an .only that throw an error. Fixes #6744.
  • firefoxGcInterval can now correctly be set to null. Fixes #6825.
  • Cypress will no longer crash the process if an empty video chunk is received. Addressed in #6818.
  • Assertions failures on DOM elements no longer show unexpected diffs when they weren't retried. Fixes #6723.

Misc:

  • Security warnings no longer show in Mac OS when opening Cypress since our application now undergoes notarization from Apple. Addresses #5791.
  • The previously used spec filter in the Test Runner is now saved and restored for projects without an ID.Addresses #6739.
  • We collect more env information from Travis builds for potential use in the Cypress Dashboard. Addresses #6808.
  • We now collect env information from Netlify builds (for example when using cypress-io/netlify-plugin-cypress) to send along to the Cypress Dashboard. Addresses #6780.
  • Type added for tag property when using Module API. Addresses #6795.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #6833.

Dependency Updates

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 80.0.3987.141 to 80.0.3987.158. Addressed in #6855.
  • Upgraded electron from 8.1.1 to 8.2.0. This bumps the bundled Chromium to 80.0.3987.158. Addressed in #6855.
  • Upgraded @benmalka/foxdriver from 0.2.3 to 0.3.0. Addressed in #6592.
  • Upgraded @cypress/get-windows-proxy from 1.6.0 to 1.6.1. Addressed in #6823.
  • Upgraded execa from 1.0.0 to 4.0.0. Addressed in #6013.
  • Upgraded extract-zip from 1.6.7 to 1.7.0. Addresses #6845 in #6845.
  • Upgraded firefox-profile from 1.3.0 to 1.3.1. Addressed in #6594.
  • Upgraded get-port from 5.1.0 to 5.1.1. Addressed in #6854.
  • Upgraded mime from 1.6.0 to 2.4.4. Addressed in #6764.
  • Upgraded minimist from 1.2.2 to 1.2.5. Addressed in #6747.
  • Upgraded squirrelly from 7.7.0 to 7.9.2. Addressed in #6735.

4.2.0

Released 3/16/2020

Features:

  • Videos can now be recorded when running Electron in --headed mode. Addresses #1767.
  • cypress cache list now prints the last time the cached binary was accessed for each version present. Addresses #6682.

Bugfixes:

  • We fixed a regression in 3.8.3 where HTTPS requests could experience slowdown. Fixes #6659.
  • We now detect some installations of Firefox that were previously undetected. Fixes #6669.
  • We fixed a race condition where an asynchronous error could fail to be caught when running the plugins file process. Fixes #6570.
  • We now more thoroughly ensure the parent of an element exists when recursively calling actionability checks in order to prevent some maximum call stack errors. Fixes #6707.
  • Specfiles containing & or % characters now correctly run instead of erroring. Fixes #4210.
  • We added support for running tests on Jira plugins even when Jira scripts were not minified. Fixes #1436.
  • We fixed a bug causing specs to hang after rerunning tests during cypress open when there was an exception if thrown in an after hook. Fixes #6619.
  • cypress verify no longer incorrectly prints messaging about this being the first time using that Cypress version. Fixes #6607.
  • Screenshots no longer fail to be taken in Electron when Cypress DEBUG logs are enabled. Fixes #6662.

Misc:

  • A warning is now printed when setting the reserved key CYPRESS_INTERNAL_ENV to a non-production value. Addresses #6436.
  • When DEBUG logs are printed from cypress:launcher, they now print a clearer log during browser detection for easier reading. Addresses #6700.
  • The Test Runner now renders ANSI colors when there is a syntax error in the spec file. Addresses #6533.
  • The Test Runner now has an icon indicating whether the specs list parent folder is collapsed. Addresses #6277.
  • There's better type information for .click, .dblclick, and .rightclick command's position argument. Addresses #6341.
  • There's a more robust type signature for .its() and .invoke(). Addresses #6431.
  • Using Cypress.dom.isDetached no longer throws a type error in TypeScript projects. Addresses #4408.
  • Using cy.clearLocalStorage({ log:false }) no longer throws a type error in TypeScript projects. Addresses #6615.
  • We added types for Cypress.sinon. Addresses #6720.
  • We've added the foundational work required to support experimental features in the Test Runner. Addresses #6257.

Dependency Updates

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 78 to 80. Addressed in #6555.
  • Upgraded electron from 7.1.13 to 8.1.1. This bumps the bundled Chromium to 80.0.3987.141 and the bundled Node to 12.13.0. Addressed in #6555.
  • Upgraded @ffmpeg-installer/ffmpeg from 1.0.19 to 1.0.20. Addressed in #6686.
  • Upgraded minimist from 1.2.0 to 1.2.2. Addressed in #6726.
  • Replaced deprecated request with cypress-io/request. Addressed in #6679.

4.1.0

Released 2/28/2020

Features:

  • There is a new cypress info command to see the locally detected browsers and other information related to Cypress. Addresses #4540.
  • You can now click a 'Try Again' button to recheck if the server at the designated baseUrl is running within the warning message during cypress open. Addresses #3284.
  • There are "collapse all" and "expand all" links in the Test Runner's "Tests" tab to collapse or expand all folders within the "Integration Tests". Addresses #6282.
  • The plugins file function's config argument now includes projectRoot (absolute path to the root of the project) and configFile (absolute path to the configuration file). Addresses #5941.

Bugfixes:

  • Fixed a regression in 4.0.2 where Cypress could throw a "Maximum call stack size exceeded" error when transmitting a circular object over the internal WebSocket. Fixes #6582.
  • We fixed an issue where using Chromium-family browsers could cause Cypress to throw a "WebSocket is not open: readyState 3" error under certain conditions. Fixes #5685.
  • We now more thoroughly ensure the parent of an element exists when recursively calling visibility and existence checks in order to prevent some maximum call stack errors. Fixes #4373.
  • We fixed an issue where a maximum call stack error would throw in some circumstances when xhr.onreadystatechange is accessed. Fixes #5864.
  • We fixed a regression in 3.5.0 where typing into an iframe with a body element with the contenteditable attribute would throw an error. Fixes #5930.
  • We now set the default window size when running Chrome headlessly to 1280x720. Fixes #6210.
  • We fixed an issue where cypress install would not complete on Node.js 8.0.0. Fixes #6512 and #6568.
  • cy.clearLocalStorage() now properly accepts the log option to disable logging. Fixes #6342.

Misc:

  • The error messages displayed when rerouting to a non same-origin domain has been updated to more accurately reflect the rules around same-origin policy. Addresses #6048.
  • We fixed an error message that would display the wrong available browser families during validation. Addressed in #6517.
  • We fixed some typos in some of our error messages. Addressed in #6508.
  • We're collecting more environment variables when running Cypress with GitLab CI. Addresses #6231.
  • The typing of cy.$$ has been updated to distinguish differences between it and Cypress.$. More info here Addresses #2027.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #6552, #6523, and #6545.

Dependency Updates

  • Upgraded electron from 7.1.10 to 7.1.13. Addressed in #6566.

4.0.2

Released 2/14/2020

Bugfixes:

  • We fixed a bug where tests in Firefox would not open on macOS if another instance of Firefox was open. Fixes #6380.
  • We fixed a regression in 4.0.0 where using .should('not.contain', ...) chained after a .contains() would produce unexpected results. Fixes #6384.
  • We fixed a regression in 4.0.0 where non-top-level require()s in tests no longer worked. Fixes #6403.
  • Re-running a failed workflow in GitHub Actions now properly generates a new Dashboard run. Fixes #6450.

Misc:

  • We fixed incorrect type definitions for Cypress.isBrowser. Addresses #6447.
  • We improved the error experience when launching a browser fails. Addresses #6432.
  • We improved the error experience when visiting the Cypress server outside of a Cypress-launched browser. Addresses #6435.

Dependency Updates

  • Upgraded @cypress/browserify-preprocessor from 2.1.1 to 2.1.4. Addressed in #6419.

4.0.1

Released 2/7/2020

Bugfixes:

  • Fixed a bug where Chromium could not be detected on macOS. Addresses #6358.
  • Fixed bugs where Edge and Firefox Nightly could not be detected on macOS. Addresses #6354 and #6345.
  • Fixed a bug where 64-bit editions of Firefox could not be detected on Windows. Addresses #6355.
  • Fixed a bug where video recordings of Firefox would omit all frames from before the last cross-domain navigation of the test. Addresses #6369.
  • Fixed a bug where Cypress could crash with the message "cannot read property 'on' of undefined" while running Firefox. Addresses #6356.
  • Corrected a link to the screenshot API documentation in the type definitions. Addresses #6359.

Misc:

  • Updated the default preferences set on Firefox to hide update notifications and otherwise improve the Firefox experience. Addresses #6346.

4.0.0

Released 2/6/2020

Summary:

Cypress 4.0.0 includes support for Mozilla Firefox browsers (beta support) and Microsoft Edge (Chromium based) browsers which is a big step forward for Cross Browser Testing in Cypress. We've also updated many of the underlying tools behind Cypress that bring new powerful features.

Breaking Changes:

Please read our Migration Guide which explains the changes in more detail and how to change your code to migrate to Cypress 4.0.

  • Mocha, Chai, and Sinon.JS has been upgraded which includes a number of breaking changes and new features. Addresses #2528, #2529, #2866.
  • During before:browser:launch, we no longer yield the second argument as an array of browser arguments and instead yield an options object with an args property in order to support more advanced browser launch options. Addresses #6306.
  • We updated the Cypress browser objects of all Chromium-based browsers, including Electron, to have chromium set as their family field. Addresses #6243.
  • The --browser flag no longer accepts canary as its sole argument to run Chrome Canary. You now have to specify chrome:canary to use the Chrome Canary browser. Addresses #6243.
  • .contains() now ignores leading, trailing, duplicate whitespaces. Addresses #92.
  • cy.writeFile() now yields null instead of the contents written to the file in order to more align with the behavior of fs. Addresses #2466.
  • Installing Cypress on your system now requires Node.js 8+. Addresses #5632.
  • Cypress no longer support CJSX. Addresses #3469.

Features:

  • Mozilla Firefox browsers now have beta support. Addresses #1096.
  • Microsoft Edge (Chromium based) browsers are now supported. Addresses #5433.
  • There is a new Cypress.isBrowser() utility function. Addresses #2023.
  • We updated the Cypress.browser object with a new channel property which contains the release channel of the detected browser. Addresses #6243.
  • There is a new matchCase option for .contains(). Addresses #2785.
  • Appending .only to multiple tests or suites will now run all tests with the .only property. Addresses #2828.
  • The isFinite assertion is now supported. Addresses #5669.
  • The empty assertion is now supported when used against Map objects. Addresses #6072.
  • The nested assertion chainer property is now supported. Addresses #3080 and #5004.

Bugfixes:

  • A test or suite appended with an .only when multiple tests or suites contained the same title now run correctly. Fixes #5345.
  • The .its() command now properly supports 0 as a value for indexes or object keys. Fixes #6216.

Documentation Changes:

Misc:

  • We now pass through errors caused when attempting to read arguments passed through config. Addresses #6279.
  • We fixed a broken 'Learn more' link within the Node.js Version panel of the Test Runner Settings. Addresses #6237.
  • The browser icons in the Test Runner now display as images with the proper branding. Addresses #6188.
  • We updated the styling of browser dropdown in the Test Runner to look more like a button. Addresses #6298.
  • The timer in the Test Runner now always displays at a consistent length. Addresses #6168.
  • You can print debug information about the memory & CPU usage of Cypress, which can be accessed by enabling the cypress:server:util:process_profiler debug stream. Addresses #6169.
  • We added types for plugin events. Addresses #6322.

Dependency Updates

  • Added @benmalka/foxdriver. Addressed in #1359.
  • Upgraded @cypress/browserify-preprocessor from 1.1.2 to 2.1.1. Addressed in #4308 and #4226.
  • Upgraded bluebird from 3.5.0 to 3.7.2. Addressed in #4226.
  • Upgraded cachedir from 1.3.0 to 2.3.0. Addressed in #4208 and #4226.
  • Upgraded chai from 3.5.0 to 4.2.0. Addressed in #2862 and #4226.
  • Upgraded chai-as-promised from 6.0.0 to 7.1.1. Addressed in #4226.
  • Upgraded chalk from 2.4.0 to 3.0.0. Addressed in #4226.
  • Upgraded commander from 2.15.1 to 4.0.1. Addressed in #4208 and #4226.
  • Upgraded debug from 2.15.1 to 4.0.1. Addressed in #4226.
  • Upgraded execa from 0.10.0 to 3.3.0. Addressed in #4226.
  • Added firefox-profiler. Addressed in #1359.
  • Added foxdriver. Addressed in #1359.
  • Upgraded fs-extra from 5.0.0 to 8.1.0. Addressed in #4226.
  • Upgraded getos from 3.1.1 to 3.1.4. Addressed in #4226.
  • Upgraded is-ci from 1.2.1 to 2.0.0. Addressed in #4226.
  • Upgraded mocha from 2.5.3 to 7.0.1. Addressed in #2703 and #4226.
  • Upgraded listr from 0.12.0 to 0.14.3. Addressed in #4226.
  • Upgraded log-symbols from 2.2.0 to 3.0.0. Addressed in #4226.
  • Added marionette-client. Addressed in #1359.
  • Upgraded ramda from 0.24.1 to 0.26.1. Addressed in #4226.
  • Upgraded sinon from 3.2.0 to 8.1.1. Addressed in #2881 and #4226.
  • Upgraded strip-ansi from 3.0.1 to 6.0.0. Addressed in #1359.
  • Added systeminformation. Addressed in #1359.
  • Upgraded support-colors from 5.5.0 to 7.1.0. Addressed in #4208 and #4226.
  • Upgraded untildify from 3.0.3 to 4.0.0. Addressed in #4226.

3.8.3

Released 1/24/2020

Bugfixes:

  • We fixed an error during cypress run indicating could not find CRI target when Cypress was unable to find the tab to control. Fixes #6053.
  • HTTP requests to sites using a TLS version lower than 1.2 now no longer fail. Fixes #5446.
  • cypress verify will no longer error on some systems when -screen is not defined. Fixes #6184.
  • We fixed a regression in 3.5.0 causing cy.type({ force: true }) to no longer forcibly type characters for readonly inputs. Fixes #6116.
  • Generated reports when using custom reporters now have a defined file property. Fixes #1495.

Misc:

  • Messages from cy.get() are now truncated at 50 lines the Command Log instead of the 1 line. Addresses #6145.
  • We now collect more environment variables for Bamboo CI when recording for the Dashboard. Addresses #4895.

Dependency Updates:

  • Upgraded electron from 7.1.7 to 7.1.10. Addressed in #6180 and #6242.
  • Upgraded http-status-codes from 1.3.2 to 1.4.0. Addressed in #6134.
  • Upgraded socket.io and socket.io-client from 2.2.0 to 2.3.0. Addressed in #6179.

3.8.2

Released 01/10/2020

Bugfixes:

  • We fixed a regression in 3.8.0 on Linux when unzip is not installed where the progress of cypress install would show up to 200%. Fixes #5967.
  • We fixed a regression in 3.7.0 that would prevent .type() from typing valid characters after invalid characters were typed in type="number" inputs. Fixes #6055.
  • Child elements of an element that uses both transform and height or width are now properly seen as visible during visiblity checks. Addresses #5974.
  • We now properly check backface visibility when the parents of a target element have the CSS style transform-style: preserve-3d. Fixes #5682.
  • DOM elements with a width or height of 0 and overflow: hidden are now properly calculated as invisible during visibility checks. Fixes #6093.
  • .should() and .and() commands with function arguments can now be chained with multiple assertions without throwing an error. Fixes #4981.

Misc:

  • We replaced the browser icons in the Test Runner with more official browser brand icons. Addresses #5921.
  • Messages from cy.log() are now truncated at 50 lines the Command Log instead of the 1 line. Addresses #5625.
  • We now capture GitLab CI's CI_JOB_NAME environment variable. Addressed in #6111.
  • Types for event emitters removeListener and removeAllListeners have been added to Cypress and cy. Addresses #5228.
  • Types for the runUrl property returned from cypress.run() has been added. Addresses #6087.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #5947 and #6075.

Dependency Updates:

  • Upgraded ansi_up from 4.0.3 to 4.0.4. Addressed in #6074.
  • Upgraded electron from 7.1.4 to 7.1.7. Addressed in #6085.

3.8.1

Released 12/26/2019

Bugfixes:

  • We fixed a bug where cypress run --headless would not run Chrome-family browsers headlessly. Fixes #5949.
  • We fixed an issue where, on some systems with IPv4 and IPv6 enabled, Cypress would fail to connect to the Chrome DevTools Protocol while launching Chrome, leading to test failures. Fixes #5912.
  • The strict cookie validation added in 3.5.0 for cy.setCookie(), cy.clearCookie(), and cy.getCookie() has been removed. Fixes #5642.
  • We fixed a regression in 3.8.0 where using .type() on number inputs to type non-number characters or the {enter} special character would not type the correct value. Fixes #5968 and #5997.
  • Configuration values set from the plugins file now display with the correct background color in the Configuration panel in the Test Runner Settings. Fixes #6024.
  • We removed the 'Me' and 'An Organization' selections in the Test Runner when setting up a project to more closely match the Dashboard UI. This also fixes an edge case where a user with no default organizations could potentially be unable to set up a project. Fixes #5954.

Misc:

  • We updated the fallback error message for visibility checks to be less confusing. Addresses #5982.
  • The type definitions for cy.location() have been improved. Addresses #5574.

Dependency Updates:

  • Upgraded get-port from 5.0.0 to 5.1.0. Addressed in #6004.
  • Upgraded chrome-remote-interface from 0.28.0 to 0.28.1. Addressed in #6008.
  • Upgraded which from 1.3.1 to 2.0.2. Addressed in #6017.
  • Upgraded ansi_up from 1.3.0 to 4.0.3. Addressed in #4331.
  • Upgraded jimp from 0.6.4 to 0.9.3. Addressed in #4331.

3.8.0

Released 12/12/2019

Features:

  • Chrome can now be run in headless mode by using cypress run --headless --browser chrome. Addresses #832.
  • Cypress now accepts a --tag argument to be used to identify separate runs. Any tags assigned will be shown on the run in the Cypress Dashboard. Addresses #2561.
  • The commands .its() and .invoke() now accept an options object to allow changing logging options. Addresses #1450.
  • Cypress will now attempt to use the unzip binary during cypress install before trying the slower, Node.js-based unzipping method. Addresses #3803.

Bugfixes:

  • We fixed a regression in 3.5.0 where Cypress would crash on Windows when trying to pass a url through --config or --env command line flags. Fixes #5466.
  • We fixed a regression in 3.5.0 where a supplied Cookie header during cy.visit() or cy.request() would be overwritten by the Cookie header generated from the browser's cookie store. Fixes #5894.
  • We fixed a regression in 3.5.0 where cy.getCookie() would incorrectly filter cookies by their domain, leading to unexpected results. Fixes #5656.
  • We fixed a regression in 3.5.0 where calling .type({ force: true }) on hidden inputs would not type the correct characters. Fixes #5835.
  • We fixed a regression in 3.5.0 where .type() was not respecting previous selections if the current value of the input was the same as the key. This also fixed an where .type() would not respect previous selections in non-selectionRange inputs (like email or number inputs). Fixes #5703.
  • During visibility checks, Cypress now properly evaluates a DOM element transformed by scale(0) or rotateY(90deg) as not visible. Fixes #723.
  • Fixed a bug where the specs list during cypress open would not refresh when files are changed on disk. Fixes #5933.
  • env configuration option displays properly within the settings panel. Previously, setting env options would incorrectly render "undefined" as the value. Fixes #5859.

Misc:

  • We removed the max viewport size and lowered min viewport size to 0 for cy.viewport() Addresses #5871 and #5892.
  • The Test Runner now shows a non-Chrome logo for browsers passed in via config.browser that are not of the Chrome family. It also supports showing the Firefox logo (in preparation for Firefox browser support). Fixes #5745.
  • We updated the look of some of our icons. Addressed in #5822.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #5643.
  • cy.request will now automatically encode special characters in the request URL, including Unicode. Addresses #5274.
  • You can pass additional Electron launch command line arguments using environment variable ELECTRON_EXTRA_LAUNCH_ARGS. Addresses #5807.

Dependency Updates:

  • Upgraded electron from 5.0.10 to 7.1.4. This bumps the internal Node version to 12.8.1 and the internal Chromium version to 78.0.3904.113. Addressed in #5849.
  • Upgraded ansi-escapes from 4.2.1 to 4.3.0. Addressed in #5815.
  • Upgraded electron-context-menu from 0.11.0 to 0.15.1. Addressed in #5495.

3.7.0

Released 11/27/2019

Features:

Bugfixes:

  • We fixed a regression in 3.5.0 where a cy.visit() that changes superdomain would incorrectly clear cookies of other domains. Fixes #5756.
  • We fixed a regression in 3.5.0 where cookies set in a redirect on a cy.visit() or in a cy.request with a custom Domain that is not a subdomain of the current domain would fail to set. Fixes #5656.
  • We fixed a regression in 3.5.0 which caused .type() to send duplicate modifier keys. Fixes #5622.
  • We fixed a regression in 3.6.1 where cy.request() with followRedirect: false would fail if a Set-Cookie header was present in the response. Fixes #5654.
  • The context of window is no longer undefined within the application under test when called within a setTimeout during strict mode. Fixes #5707.
  • Cypress now captures the SHA of builds generated through Travis CI during pull requests. This should resolve issues with Cypress status checks sometimes not running within GitHub Integration. Fixes #5728.
  • Cypress now automatically strips double quotes from --ci-build-id and group flag arguments during cypress run. Fixes #5686.
  • Assertions printed in the Command Log now correctly identify integers from string integers. Fixes #25.
  • Empty spaces are now accurately reflected in the Command Log within assertions. Fixes #1360.
  • Keys printed in the Command Log when using the have.all.keys assertion now correctly display. Fixes #753.
  • We fixed an issue where Cypress would throw an error when using cy.visit() on a cleverapp.io domain. Fixes #5722.
  • Fixed a bug where fixtures consisting only of null would cause an error. Fixes #472.
  • Fixed a bug where, if the Test Runner child process is killed with a signal and does not exit normally, the npm CLI process would not exit with an error. Fixes #5808.

Misc:

  • Added a new, more specific error message when an item is not visible because it has position: fixed and is being overflowed over. Addresses #1379.
  • cy.visits that cause a superdomain change will now result in 2 requests to the origin server. This should not affect tests, as tests will still re-run on a superdomain change. This is a side-effect of the fix for #5756.
  • The configuration object returned from the plugins file is now validated and will throw a helpful error message when invalid. Addresses #5712.
  • The configuration panel under Settings in the Test Runner now has a white background for better readability. Also each configuration option with nested properties is now collapsible. Addressed in #5068.

Documentation Changes:

Dependency Updates:

  • Upgraded parse-domain from 2.0.0 to 2.3.4. Addressed in #5726.

3.6.1

Released 11/08/2019

Bugfixes:

  • The Electron browser no longer hangs when testing applications that have a prompt in a beforeunload handler. Fixes #2118.
  • We fixed a regression in 3.5.0 where HTTP redirects could cause strange behavior, including cookies not being set as expected, leading to authentication issues and other problems. Fixes #5436 and #5432.
  • When using cy.setCookie() with the same options Object, Cypress now correctly sets the new cookie instead of the one passed into a previous cy.setCookie(). Fixes #2701.
  • We fixed a regression in 3.5.0 where cy.clearCookie() would not act as expected when using certain baseUrls. Fixes #5453.
  • Cypress no longer crashes with the error Failed to parse or set cookie named "xxx" when loading certain websites. Fixes #4990.
  • Cypress now sends the expected headers or request body in a cy.visit() to an HTTPS URL using the default port, 443. Fixes #5367.
  • We fixed a regression in 3.6.0 where Cypress would crash with TypeError: Cannot read property 'length' of null on some network requests. Fixes #5585.
  • We fixed a regression in 3.5.0 that caused the red target to be rendered incorrectly when specifying offset coordinates to .click(). Fixes #5635.
  • We fixed a regression in 3.6.0 that was causing an incorrect element to receive the click event during action commands. Fixes #5578.
  • We fixed a regression in 3.5.0 causing text after using modifier keys in .type() to not be typed. Fixes #5622.
  • Elements with backface-visibility: hidden; are now accounted for when asserting on the elemtent's visibility. Fixes #2985.
  • We fixed a bug where a failed Cypress commands would incorrectly throw cannot read property 'replace' of undefined if the error's stack was undefined. Fixes #1669.
  • The 'Log In' modal within Cypress when setting up a project now correctly closes when manually closed. Fixes #5631.

Misc:

  • We improved the user experience around inspecting events fired during .click() and .type() commands within the console. Addresses #5553.
  • We increased the timeout when connecting to the "Developer Tools Protocol" from 5 seconds to 20 seconds and also added logging for when the connection takes longer than 5 seconds. Addresses #5610.
  • There is no longer a warning about Promise.defer appearing in stderr when running with video recording enabled. Addresses #5611.
  • Types for .rightclick() and .dblclick() have been updated to correctly reflect their accepted options. Addresses #5617.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #5556

3.6.0

Released 10/31/2019

Features:

  • testFiles now also accepts an Array of glob patterns when specifying what test files to load in configuration. Addresses #5401.

Bugfixes:

  • We fixed a regression in 3.5.0 where the maximum size of an HTTP header or body in a stubbed cy.route() was limited to 8kb causing requests to fail with a 431 HTTP error. Fixes #5431.
  • We fixed a bug where certain types of uncaught errors originating from the application under test would not route through the uncaught
    handler, and thus could not caught and ignored. These errors will also now correctly indicate that they came from application code. Fixes #987.
  • We fixed a regression in 3.5.0 that would throw an error during cypress verify when running as a non-root user on a non-Windows machine. We now always set the --no-sandbox flag when verifying in Electron, even when running as a non-root user. Fixes #5434.
  • We fixed a regression in 3.5.0 where sometimes cookies were not set on the correct URL during a redirect inside of a cy.visit() or cy.request(). Fixes #5432.
  • We fixed a regression in 3.5.0 causing environment variables containing unicode values to be incorrectly resolved when read via Cypress.env(). Fixes #5435.
  • We fixed a regression in 3.5.0 that prevented use of .click() or .type() inside of an iframe element. Fixes #5449. Fixes #5435.
  • We now throw the proper error message when an element cannot be interacted with due to being covered by an element with position:fixed. Fixes #5430.
  • We fixed a regression in 3.5.0 that caused some click events to not be sent to the correct elements during .click(). Fixes #5459.
  • We updated .type() to properly respect focus selection changes during typing. Fixes #5456.
  • We fixed a regression in 3.5.0 that caused selected text to be overwritten while typing a modifer key during .type(). Fixes #5439.
  • We now send all the proper events during .type() to input elements with type date, time, and datetime-local so that it now behaves as it did prior to 3.5.0. Fixes #5476.
  • We now properly render iframe placeholder content when previewing DOM snapshots. Fixes #5295.

Misc:

  • We no longer log the default option {multiple: true} in the Command Log or the console during cy.dblclick(). Addresses #5406.
  • The text color of inactive tabs within the Cypress Chrome browser has been set to white for better readability. Addresses #1661.

Dependency Updates

  • Replaced express-handlebars with squirrelly to reduce dependency size. Addressed in #5521.
  • Upgraded graceful-fs from 4.2.0 to 4.2.3. Addressed in #5497.

3.5.0

Released 10/23/2019

Features:

  • We now record video by default when you run Cypress in Chrome, Chromium, or Canary such as during cypress run --browser chrome. Addresses #4608.
  • There is a new .rightclick() command to right click on DOM elements. Addresses #53.
  • Cypress now accepts a --config-file argument to specify a different file to be used for Cypress configuration. You can also pass false to the --config-file to not use any configuration file. Addresses #1369.
  • You can now use your system's Node version by setting the nodeVersion to system in your configuration. This Node version will be used to build files in your integrationFolder and supportFile and also be used to execute code in your pluginsFile. If not set, Cypress will continue to use the Node version bundled with Cypress. Addresses #4432.
  • .dblclick() now accepts position, x, and y arguments. Addresses #116.
  • .dblclick() now accepts force and multiple in its options. Addresses #116.
  • .screenshot() now accepts a padding argument when screenshotting elements that will alter the dimensions of the screenshot of the element. Addresses #4440.
  • cy.visit() now accepts a qs option representing an object of query paramaters to be used in the URL. Addresses #5034.
  • cy.viewport() now allows for viewport sizes up to 4,000 pixels. Addresses #5181.
  • cy.viewport() accepts new size presets for iphone-xr, iphone-x, samsung-s10 and samsung-note9. Addresses #4967.
  • Passing a ~ to CYPRESS_CACHE_FOLDER will automatically resolve to the user's home directory. Addresses #5386.

Bugfixes:

  • .dblclick() and .click() now fire all appropriate mouse events including mouseover, mousemove, mouseout, pointerdown, pointerup, and pointermove. Fixes #1016, #1847, #2045, #2521, #2768, #2928, #2957, and #3224.
  • We updated .dblclick() to follow the same actionability checks as .click(). Fixes #3798.
  • Coordinates clicked during .click() are now correct if the element being clicked is within an iframe. Fixes #4347.
  • We now allow .type() to be used on any DOM element. The element will receive all of the type events. Fixes #2166 and #3661.
  • If a typeable element gains focus during .type(), Cypress now continues typing into the newly focused element. Fixes #2240.
  • We now correctly borrow the property getter for maxLength when using .type() on an input. Fixes #4587.
  • We fixed an issue where datetime-local inputs would not have their value updated during .type(). Fixes #2613.
  • .type() now allows you to type - into number inputs with text selection. Fixes #4767.
  • We now fire an input event when using .type() typing {enter} inserts a newline. Fixes #4870.
  • We no longer input text when non-{shift} modifier keys are typed in .type(). Fixes #5424.
  • We now properly send the code property during keyboard events triggered during .type(). Fixes #3722
  • Cypress now sends screenX and screenY properties to events triggered using .trigger(). Fixes #3187.
  • We fixed a bug where Cypress could not intercept traffic sent through cy.visit() to IP addresses over HTTPS, leading to ERR_SSL_VERSION_OR_CIPHER_MISMATCH errors. Fixes #771.
  • We fixed a bug introduced in 3.3.0 where some HTTPS sites failed to load during cy.visit() and cy.request() with a "handshake failed" error. Fixes #4394.
  • We fixed a bug where ECC SSL Certificates were not supported during cy.visit() that was introduced in 3.3.0. Fixes #4368.
  • We fixed an issue introduced in 3.4.0 that would cause the Selector Playground to not properly highlight the currently hovered element. Fixes #4872.
  • Cypress.env() now escapes <script> tags in the configuration file. Fixes #4952.
  • Cypress now properly handles converting responses of content-type application/vnd.api+json to JSON. Fixes #5165.
  • XHR responses in cy.route() that exceed 80kb in size no longer fail with an ERR_EMPTY_RESPONSE error. Fixes #76.
  • Cypress no longer crashes with dest.end errors on Windows machines. Fixes #2181.
  • The onFocus event no longer incorrectly fires on hidden elements. This fixes an issue introduced in 3.3.2. Fixes #4898.
  • You can now call .click() on inputs or textareas that are readonly. This fixes an issue introduced in 3.4.1. Fixes #4874.
  • Cypress no longer crashes with a "port" option should be a number or string error when receiving an erroneous HTTP CONNECT. Fixes #3250.
  • Cypress tests now timeout if there are no Cypress commands enqueue and the done() callback is not called within the commandTimeout. Fixes #1075, #2478, #3349, and #4790.
  • We fixed a bug where Cypress would exit with an ENOTCONN error at the end of a test run when using Node >12.11.0 on Windows OS. Fixes #5241.
  • We fixed a bug where the Chrome policy warnings introduced in 3.4.0 would not appear. Fixes #4986.
  • We improved the way that cookies are handled for Chrome browsers. This fixes an issue when parsing cookies that were set with a domain beginning with a . in Chrome 77. Fixes #5142 and #5206.
  • We fixed a bug when visiting an application that does an HTTP request to a .js file containing Unicode transferred using Content-Encoding: gzip that could cause the JavaScript file to become corrupted. Fixes #1746.
  • We now normalize the Cypress cache folder to resolve in the current folder and not with respect to the node_modules/cypress folder. Fixes #2364.

Misc:

  • Cypress now displays a more precise error message when checking an element's visibility if an element is detached from the DOM. Addresses #4946.
  • We increased the timeout to wait for Xvfb to start from 5 seconds to 30 seconds. This should resolve some issues where the error Could not start Xvfb was being thrown because Xvfb could not start within the allowed time. Addresses #5110.
  • We now warn when using cypress run from the binary directly (not from an npm module) since this is not its intended use. Addresses #1573.
  • We now warn on cy.visit('file://...) to explain that this url format is not supported and suggest visiting a relative HTML file. Addresses #4452.
  • Setting the reserved CYPRESS_ENV environment variable will now throw an error. Addresses #1621.
  • We now throw a better error when passing in an Object to the browser argument of the Browser Launch API explaining that a String is expected instead. Addresses #4966.
  • An error will now be thrown if an invalid name or value is supplied to cy.setCookie(), matching the RFC 6265 compliant validation of cookie names and values. Addresses #5206.
  • Passing an invalid type to the 2nd argument of cy.get() now throws an error explaining that an options Object is expected. Addresses #2953.
  • We now throw a more helpful error message during cy.screenshot() that would result in a screenshot with 0 width or height. Addresses #5149.
  • Stdout printed during cypress run no longer truncates text such a filenames and instead wraps the text to fit within the width of the terminal. Addresses #4977.
  • We now display up to 2,000 characters of HTTP property values within error messages during cy.request() errors. Addresses #3145.
  • Cypress now always considers localhost to be in NO_PROXY. To make Cypress send traffic for localhost through the proxy, you will now have to pass <-loopback> in NO_PROXY. Addresses #4780.
  • We changed the way cookies are set in cy.visit() to more closely match the browser's behavior when setting cookies, particularly when using fetch with cookies. Addresses #4433.
  • We've added more flags to send to Chrome upon launch that should help with issues encountered during browser automation including --disable-backgrounding-occluded-window, --disable-breakpad, --disable-ipc-flooding-protection, --password-store=basic, and --use-mock-keychain. Addresses #5132 and #3633.
  • Scrolling the specs list now only scrolls the list of spec files and no longer scrolls the search and filter bar. Addresses #4904.
  • We fixed some layout issues within the Test Runner that were introduced in 3.4.1. Addresses #4888, #4912, and #4959.
  • The counter badge for spies and stubs no longer appears visually cut off. Fixes #4822.
  • TypeScript 3.6.2 no longer errors due to outdated jQuery types. Addresses #5065.
  • We updated types for Cypress.Commands.overwrite() to not allow an options object as an argument. Addresses #5341.
  • We added failures and message types when a run fails using the Module API. Addresses #5335.
  • We're continuing to make progress in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #4869, #4906, #5096, #5107, #5156, #5173, and #5352.

Documentation Changes:

  • Added a .rightclick() doc.
  • Added a Webinars doc containing videos of all of the official Cypress webcasts.
  • Updated the .dblclick() doc to include new position, x, and y arguments plus force and multiple options.
  • Added the --config-file argument to Command Line and Module API doc.
  • Added the nodeVersion argument to Configuration doc and mentioned its uses in the Plugins Guide and Writing a Plugin doc.
  • Updated all docs to mention 'configuration file' instead of static cypress.json file since this is not configurable via a --config-file argument.
  • Added qs option to cy.visit() with examples.
  • Added padding option to cy.screenshot() with examples.
  • Updated the cy.viewport() doc to have a max viewport size of 4000.
  • Added newly supported viewport sizes to the cy.viewport() doc.
  • Documented new keyboard shortcuts in the Test Runner doc.
  • Added a new section on troubleshooting problems with Xvfb to the Continuous Integration doc.
  • Added a section to our Debugging doc about our cypress-fiddle plugin used for playing around with small test cases.
  • Added a section to our Debugging doc explaining how to patch an installed version of Cypress.
  • Mention not needing to decode portions of the url in the cy.route() doc.
  • Mention that the file:// prefix is not supported in the cy.visit() doc.
  • Add a note about when passing <-loopback> in NO_PROXY is necessary in the Proxy Configuration doc.
  • Updated our Dashboard docs to include screenshots containing our new Dashboard navigation design.
  • We have some newly translated documentation in Portuguese. If you'd like to help in translating more, please open a pull request in our documentation repo.

Dependency Updates

  • Upgraded Chrome browser version used during cypress run and when selecting Electron browser in cypress open from 61 to 73. Addressed in #4720.
  • Upgraded electron from 2.0.18 to 5.0.10. Addressed in #4720.
  • Upgraded node from 8.9.3 to 12.0.0. Addressed in #4720.
  • Upgaded jquery from 2.2.4 to 3.1.1. Addressed in #1229.
  • Upgraded sanitize-filename from 1.6.1 to 1.6.3. Addressed in #5216.
  • Upgraded @cypress/get-windows-proxy from 1.5.4 to 1.6.0. Addressed in #5108.

3.4.1

Released 7/29/2019

Dashboard Features:

  • We’re excited to announce GitHub integration for the Cypress Dashboard. You can now get timely and useful test run information within pull-requests via status checks and pull-request comments. Learn all about it on our blog. Addresses #981.

Bugfixes:

  • Fixed a bug where the content of pages using non-UTF-8 character encoding would become corrupted when opened in Cypress. Fixes #3479, #1543, and #3650.
  • Fixed a regression introduced in 3.4.0 that caused an error to be thrown when chaining together multiple assertions using the and chainable getter. Fixes #4833.
  • The include and includes assertion chainers now correctly work the same as contain and contains assertion chainers. Fixes #4833.
  • Cypress now correctly works offline on Windows when visiting a localhost URL. Fixes #4763.
  • cy.type() now factors in the readonly property of <input /> elements, and will wait for this property to be false before attempting to type. Fixes #1246.
  • Variables beginning with top and location in your application code are no longer modified when modifyObstructiveCode is true. Fixes #4794.
  • We removed erroneous socket connections when the browser is initially launching. Fixes #4776.
  • Fixed a bug when dismissing pinned snapshots that would cause the page to be wiped with nothing rendered. Fixes #4864.
  • We upgraded the mocha-teamcity-reporter dependency so that it no longer errors in certain situations when trying to access duration on tests. Fixes #4654.
  • We upgraded the lodash dependency to fix a security vulnerability warning. Fixes #4699, #4730, #4743.

Misc:

  • We now ensure we are shipping with production versions of dependencies such as react, mobx, etc. This should help to prevent conflicts with Developer Tools extensions and increase performance by reducing memory, heap allocation, and overall JS bundle size. Addresses #4844.
  • Video recordings now wait after all tests finish to ensure that the video captures the final rendered frames of the browser. This prevents the last few paints from being cut off. Fixes #2370.
  • Cypress now looks for any npm proxy configuration values as a fallback when no other system proxy configuration is found. This brings this feature into parity with how npm reads off proxy configuration values during an npm install. Addresses #4719.
  • We updated the messaging when there is a failure downloading Cypress to recommend checking your proxy settings. Addresses #1662.
  • A warning message now displays if you attempt to run the Cypress binary directly instead of going through the cypress npm package. Addresses #1573.
  • There are newly added examples in the TypeScript definitions for custom commands, cy.location() and .should(). Addresses #3684 and #4715.
  • The types for the cy.contains(content, options) syntax have been added. Addresses #4727.
  • Types for cy.once() have been added. Addressed in #4788.
  • There is now a { parseSpecialCharSequences: false } option to cy.type() that disables parsing the special character sequences found between the {} characters. This will now type what you've provided literally without any special parsing. Fixes #4287.
  • You can now zoom in the main Test Runner window and also the Electron browser. Corresponding keyboard shortcuts for Zoom in, Zoom out and Actual Size are also available. Addresses #1231.
  • When viewing the Test Runner's main window at its smallest size, the header text no longer incorrectly wraps. Addresses #86.
  • We're continuing to make process in converting our codebase from CoffeeScript to JavaScript. Addresses #2690 in #4781 and #4817.
  • We increased the cypress binary verification phase from 10 seconds to 30 seconds to accomodate underpowered or overwhelmed machines typically found in CI environments. Addresses #4624.

Documentation Changes:

Dependency Updates

  • Upgraded @ffmpeg-installer/ffmpeg from 1.0.17 to 1.0.19. Addressed in #4792.
  • Upgraded browserify from 13.3.0 to 16.3.0. Addressed in #4751, #4825 and #4826.
  • Upgraded data-uri-to-buffer from 1.2.0 to 2.0.1. Addressed in #4622.
  • Upgraded duplexify from 4.0.0 to 4.1.1. Addressed in #4853.
  • Upgraded graceful-fs from 4.1.15 to 4.2.0. Addressed in #4818.
  • Upgraded lodash from 4.17.11 to 4.17.15. Addressed in #4684, #4709, #4784.
  • Upgraded mocha-junit-reporter from 1.23.0 to 1.23.1. Addressed in #4785.
  • Upgraded p-queue from 1.2.0 to 6.1.0. Addressed in #4750.
  • Upgraded semver from 6.0.0 to 6.3.0. Addressed in #4797.
  • We also updated and removed some dependencies used for development.

3.4.0

Released 7/9/2019

Features:

  • Users can now log in to the Test Runner through the browser installed on their system. This also allows for login via GitHub with U2F keys. Addresses #3583, #4337, and #1162.
  • Google or SSO (if configured) login is now supported in the Test Runner. Addresses #3519.

Bugfixes:

  • Cypress now properly supports partial matching of string values for assertions contain.text, contain.html, and contain.value. Fixes #1969.
  • A form is now properly submitted when using .type('{enter}') on a form containing no buttons and only one input that allows implicit submission. Fixes #4495.
  • Extra whitespace and quotations are now stripped from the CYPRESS_INSTALL_BINARY environment variable to help prevent some unexpected results when set in Windows. Fixes #4506.
  • Electron rendering warnings are no longer printed to console output. Fixes #4288.

Misc:

  • We now expose a downloadable binary for each commit made into the develop branch of the cypress repository so that pre-released versions can be installed. See this commit for an example. Addresses #4525.
  • There are now a series of checks that are run during download of Cypress to verify that the zip file downloaded is the correct file. Addresses #812 and #3515.
  • A warning now displays for Windows' users who have Group Policy settings that may interfere with usage of Cypress. Addresses #4391.
  • There's a new warning when mouse interactions fail displaying that it failed due to the element having CSS pointer-events: none. Addresses #3164.
  • If a URL is passed to cy.route() containing percent-encoded characters, we now display a warning explaining that cy.route() expects a decoded URL. Addresses #2372.
  • Environment variables for Semaphore 2.0 are now captured when recording tests to the Dashboard. Fixes #4671.
  • We now capture environment variables set from Concourse CI when recording tests to the Dashboard. Fixes #4376.
  • We replaced capturing environment variables from SnapCI (which is no longer available) to instead capture ones set from GoCD when recording tests to the Dashboard. Fixes #2680.
  • The JSON schema file used for intelligent code completion for the Cypress configuration file has been updated to match our documentation.

Documentation Changes:

Dependency Updates

  • Removed string-to-stream since it was no longer being used. Addressed in #4619.
  • Upgraded @cypress/commit-info from 2.1.3 to 2.1.4. Addressed in #4597.
  • Upgraded @cypress/react-tooltip from 0.4.0 to 0.5.0. Addressed in #4610.
  • Upgraded errorhandler from 1.5.0 to 1.5.1. Addressed in #4618.
  • Upgraded fs-extra from 8.0.1 to 8.1.0. Addressed in #4620.
  • Upgraded request-progress from 0.4.0 to 3.0.0. Addressed in #4584.
  • We also updated and removed some dependencies used for development.

3.3.2

Released 6/27/2019

Performance Improvements:

  • We fixed a regression introduced in 3.3.0 that was causing the Test Runner to do extremely unnecessary re-renders of the Command Log on any command change - leading to exponential performance degradation on any run. This was the root cause behind many users experiencing a reduction in performance when upgrading to 3.3.0 or above. Fixes #4411 and #4313.
  • We reduced memory consumption and improved the performance of running tests anytime you're inside of cypress open. Fixes #2366.
  • We no longer delay proxied responses with no body with status codes 1xx, 204, 304. This fixes a regression introduced in 3.2.0 where responses with these status codes were delayed when using a proxy. Fixes #4298.
  • Snapshots were previously being mistakenly stored then instantly deleted when numTestsKeptInMemory was set to 0. We now no longer record the snapshots at all when numTestsKeptInMemory is set to 0. This should slightly improve the performance of running tests with this setting. Fixes #4104 and #4164.

Bugfixes:

  • Cypress no longer watches files when run using cypress run. This will fix some runs that were crashing with an ENOSPC error. Fixes #4283.
  • Cypress now correctly handles blur and focus events in situations where the browser has lost focus. Fixes #4039, #1176, and #1486.
  • If the DOM element provided to .type() is already in focus, Cypress no longer attempts to click on the DOM element. This allows you to call .focus() on elements that are focusable, but not necessarily clickable and type into them using .type(). Fixes #3001 and #4420.
  • Some elements inside of a parent with CSS overflow: hidden that flow outside of its parent are now properly considered hidden. #4161
  • Elements that are inside a parent with CSS position: absolute which is itself inside of a parent element with overflow: hidden are now properly considered visible. Fixes #4395 and #755.
  • <option> and <optgroup> elements are now properly considered visible if it is contained within a visible <select>. Fixes #4473.
  • <body> and <html> elements are now properly always considered visible. Fixes #4475.
  • <td> and <tr> elements with CSS visibility: collapse are now properly considered hidden. Fixes #4476.
  • We now correctly handle form submission when using .type('{enter}') on a form containing a button of type reset. Fixes #3909.
  • If a site's content-type is null, undefined or cannot be determined during cy.visit(), we now look at the content of the site and evaluate whether it looks like HTML. If it does look like HTML we no longer error and continue as if it the site's content-type is text/html. #1727 #773 #3101.
  • Previously Cypress would send the auth header to any URLs that match the CORS origin of the original auth header. We now correctly only send the auth headers when there is an exact match on the protection space. Fixes #4267.
  • Requests that go through cy.visit() or cy.request() are now automatically retried on ENOTFOUND errors. Fixes #4424 and #1755.
  • Cypress now errors when the body parameter passed to cy.request() contains a circular reference. Fixed in #4407.
  • We fixed an issue where the ignoreTestFiles configuration was being filtered out when passed via a command line flag, so in effect being ignored. Fixes #1696.
  • Setting NO_PROXY is now respected for HTTPS urls, as it should be. Fixes #4303.
  • When running tests with non-string test titles, the screenshots now automatically stringify the test titles instead of throwing an error. Fixes #4310.
  • Cypress no longer incorrectly errors when calling cy.window().screenshot(), cy.window().scrollTo() or cy.window().trigger() in an application with multiple iframes. Fixes #4396.
  • Fixed a regression in 3.3.0 causing some users using proxy to see the "Browser was not launched through Cypress" error during cypress open. This was caused by incorrectly routing requests for Cypress's internal server on localhost through the user's proxy. Fixes #4410.
  • We fixed situations during a test failure where the Test Runner would throw RangeError: Maximum call stack size exceeded. Fixes #1958 and #4346.
  • Fixed issue where window.performance.getEntriesByType would return undefined instead of an array within application code when using cy.clock(). Fixes #3625.
  • Passing an array of strings to ignoreTestFiles no longer causes an error to throw. Fixes #4312.
  • Fixed a visual bug when aliasing a non-route subject multiple times that would cause the Test Runner to show 'undefined' alias with empty counts. Fixes #4429.
  • Fixed regression introduced in 3.2.0 where Cypress would error because it could not find a type definition file for '../sinon'. Fixes #4272.
  • cy.writeFile() no longer errors in TypeScript files when passing an options object as its third argument. Fixes #4461.
  • cy.stub() no longer errors in TypeScript files when evaluating returns. Fixes #4302.

Misc:

  • Warnings are now displayed when recording in cypress run to warn when a project is nearing its organization's usage limit. They also clearly explain any consequences of going over a plan's usage limit. Addresses #4530.
  • An warning icon with a tooltip is displayed in the Runs tab of the Test Runner when parallelization was disabled during the run due to being over the organization's usage limit. Addresses #4489.
  • You can now opt out of sending exceptions to https://api.cypress.io by setting CYPRESS_CRASH_REPORTS=0 in your system environment variables. #4386
  • We are now capturing Google Cloud build details when recording tests to the Cypress Dashboard. Addresses #3582.
  • The tests titles and headers in the Command Log no longer truncate with elipsis when the text is longer than that width of the Command Log. Instead the text wraps so that all text is shown. Addresses #3947.
  • Special env vars are now truncated in Cypress.env() and the debug logs. Addresses #4501.
  • The projectId in now displayed in the configuration in the Test Runner settings like all other configuration values. Fixes #4500.
  • When recording to the Dashboard, unrecognized warnings coming from the API server are now displayed in stdout. Fixes #4489.

Documentation Changes:

Dependency Updates

  • Removed electron-positioner since it was no longer being used. Addressed in #4502.
  • Upgraded chokidar from 1.7.0 to 3.0.1. Addressed in #4487.
  • Upgraded cookie from 0.3.1 to 0.4.0. Addressed in #4329.
  • Upgraded dependency-tree from 6.5.0 to 7.0.2. Addressed in #4364.
  • Upgraded fs-extra from 0.30.0 to 8.0.1. Upgraded in CLI package only to 5.0.0. Addressed in #4418, #4419, #4422, #4437, #4555, #4559, #4571, #4581.
  • Upgraded mocha-junit-reporter from 1.18.0 to 1.23.0. Addressed in #4417.
  • Upgraded pluralize from 7.0.0 to 8.0.0. Addressed in #4438.
  • Upgraded shell-env from 0.3.0 to 3.0.0. Addressed in #4466, #4467, and #4471.
  • Upgraded winston from 0.9.0 to 2.4.4. Addressed in #4538.
  • We updated and removed some dependencies used for development.

3.3.1

Released 5/23/2019

News:

Bugfixes:

  • Cypress no longer accidentally prints internal Electron logs when running cypress run. This bug would exhibit itself when verifying and running Cypress the first time after installation. You may have seen these logs when running in CI. Fixes #4255.
  • Fixed a bug for users running external network proxies that prevented requests from completing. Requests should now all work correctly. Fixes #4257.
  • Fixed a regression in 3.3.0 causing large requests such as multipart/form-data uploads to hang. Fixes #4240, #4252, and #4253.
  • Fixed issue where support for have.focus, not.have.focus, be.focused and not.be.focused assertions were not working. Fixes #4265.
  • Names given to .as() now work properly when they contain a . character. Fixes #3512.
  • The proper error is now thrown when passing {log: false} to a Cypress command that failed. Fixes #3847.
  • Fixed an issue where highlighting a command's snapshot would throw an error when no application was rendered in the AUT frame. Fixes #4177.
  • We now properly detect the branch name when running Cypress in AppVeyor. Fixed in #4234.

Misc:

  • Fix capitalization of Xvfb in error messages. Addressed in #4262.

Documentation Changes:

  • We have some newly translated documentation in Chinese and Japanese. If you'd like to help in translating more, please open a pull request in our documentation repo.

3.3.0

Released 5/17/2019

News:

Features:

  • Cypress now automatically reads from your system's HTTP_PROXY, HTTPS_PROXY, and NO_PROXY environment variables and proxies traffic accordingly through Cypress based on these values. This includes network traffic within your application under test, when downloading Cypress, and when accessing 'Runs' within the Test Runner. Please read our new Proxy Configuration doc to understand more about proxy configuration in Cypress. Fixes #672, #733, #939, #1039, #1459, #1469, #1470, #1541, #1608, #2295, #3855, #3865, #1401 and #3857.
  • Your project's current proxy settings now display in the Settings of the Test Runner. Addresses #3856.
  • Support for have.focus, not.have.focus, be.focused and not.be.focused assertions have been added. Addresses #97.
  • We now offer a separate 32bit and 64bit build for Windows. Addresses #716, #787, #2095, #706, #3706, and #4016.
  • Requests that go through cy.visit() or cy.request() are now automatically retried under the hood when the request fails. This more closely reflects Chrome's default behavior on requests. Addresses #4013, #898 and #1013.
  • cy.visit() and cy.request() now support new options retryOnStatusCodeFailure and retryOnNetworkFailure to allow changing Cypress's automatic request retry on status codes and network errors. Addresses #4013, #898 and #1013.
  • .type() now supports the special character sequences {insert}, {pageup}, and {pagedown}. Addresses #3845.
  • We now indicate which XHRs match which alias in the Command Log on .wait() when they match an alias multiple times. Addresses #477.
  • The console log when clicking on the cy.visit() command now displays its resolved options arguments. Addresses #3721.
  • There's a new 'canceled' XHR status shown on the Command Log to indicate the difference between calling xhr.abort() and the browser canceling the request due to page navigation. Addresses #3973.
  • The Electron browser now runs Chrome Version 61. Addresses #4000.
  • Running Cypress via cypress run now supports scripts of type="module". Fixes #3696.
  • Exposed Cypress.isCy() method to check if a value is a valid instance of cy or a cy chainable. Fixes #3822.
  • There is a new "Download Chromium" menu item in the "Help" menu of the Test Runner links to Cypress's Chromium Download Tool. Addresses #3977

Bugfixes:

  • Fixed a regression introduced in 3.2.0 that caused an error to throw when visiting domains with certain public suffixes. Fixes #3717.
  • When running Cypress with NODE_OPTIONS environment variables set, Cypress no longer issues an incorrect 0 exit code. #1676
  • Fixed a regression introduced in 3.2.0 that caused .its() to no longer retry when it yields undefined. #3837
  • Fixed a regression introduced in 3.2.0 that caused cy.fixture() to throw a EISDIR error if a directory had the same name as a file within that same directory. Fixes #3739.
  • user-agent headers sent as arguments to cy.request() and cy.visit() are now properly sent. Fixes #3873 and #3719.
  • When a request is proxied through Cypress and there is a network error, we no longer send an HTML response with a 500 status code. We now kill the browser-facing socket and let the network error be handled by the application under test. Fixes #4101, #4231, #1036, #4231, and #1398.
  • We changed Cypress's implementation to no longer rely on internal XHR events when the browser navigates. This fixes a a bug in Chrome 71+ that could cause XHRs to pend forever. Fixes #3973 and #4130
  • We greatly improved the speed of proxied requests through our network layer. Fixes #3192 and #1469.
  • If an error occurs during cypress verify, we now kill the verification process after 10 seconds and print the error message. This should prevent some situations where Cypress would hang during installation or verification and never exit. Fixes #819.
  • Cypress automatically retries cypress verify and cypress run commands by starting its own Xvfb server on Linux if the first attempt fails due to possible DISPLAY misconfiguration. Addresses #4034.
  • Cypress now properly handles typing JavaScript object prototype methods (like hasOwnProperty) into .type(). Fixes #3423.
  • We now set the form option to true if the Content-Type header equals application/x-www-form-urlencoded and json is not already set by a user. This fixes a situation where Cypress would try to parse the body as a string, resulting in a confusing error message. Fixes #2923.
  • cy.contains() now correctly handles comma delimited arguments passed to the selector argument. Fixes #2407.
  • Passing a browser path containing spaces now works properly when passed to the --browser argument. Fixes #3979
  • Fixed display of tooltips when selecting elements from the Selector Playground so that they display at the correct coordinates when scrolling. Fixes #1351.
  • The lists of spec files now display at the correct indentation level when they are nested more than 5 directories deep. Fixes #3652.
  • Cypress now properly parses environment variables with empty values. Fixes #3742.
  • Assertions running outside of a test are now properly handled in Cypress instead of throwing internal errors. Fixes #3926.
  • Cypress.log() now throws an error when not properly passed an object as its argument. Addresses #3658.
  • Cypress.log() no longer throws when called before any other Cypress commands. Fixes #3658.

Misc:

  • We now better support capturing environment variables within Azure DevOps. Addresses #3657.
  • Cypress now only scans for spec changes when the watcher sees changes, rather than polling to scan. Addresses #3069.
  • The ability to open the context menu to see "Inspect Element" has been reenabled in the Electron browser. Addresses #4002.
  • We no longer package non-Windows FFmpeg builds with Windows builds, resulting in a 35-40% reduction in zipped size and a 36-43% reduction in unzipped size of download. Addresses #3888.
  • The warning messages when going over test recording limits have been updated to correctly display 'monthly tests' and 'private tests' where necessary. Addresses #4024.
  • When an HTTP request is received by the proxy layer, by default, we send it with a Connection: keep-alive header so that the connection will be reused if possible. Addresses #3857.
  • Improved accessibility of Test Runner for screen readers. Addresses #3850.
  • Cypress type definition now allow a timeout option in cy.hash(). Fixes #3844.
  • Fixed type definition for match assertion so that it now only accepts RegExp type arguments. Fixes #2578.
  • The .trigger() type definition now expects its options to be ObjectLike. Addressed in #3809.
  • The cy.clock() type definition now allows for type Date. Fixed in #4106.
  • Added type definition for undocumented Cypress.LocalStorage.clear method. Fixes #4070.
  • Added type definition for Cypress.isCy() method. Fixes #3822.
  • Added missing type definitions for some cy.visit() options. Fixes #3989.
  • The spinner animation should more smoothly spin when a command is pending in the Test Runner. Addressed in #4005.

Documentation Changes:

Dependency Updates

  • Upgraded commit-info from 2.1.2 to 2.1.2. Addressed in #4045
  • Upgraded data-uri-to-buffer from 0.0.4 to 1.2.0. Addresses #4152.
  • Upgraded electron from 1.8.2 to 2.0.18. Addresses #4000.
  • Upgraded electron-packager from 9.1.0 to 13.1.1. Addresses #4155.
  • Upgraded express-handlebars from 3.0.0 to 3.0.2. Addressed in #4086.
  • Upgraded find-process from 1.2.1 to 1.4.1. Addressed in #4087.
  • Upgraded getos from 2.8.4 to 3.1.1. Addressed in #4222.
  • Upgraded http-status-codes from 1.3.0 to 1.3.2. Addressed in #3949.
  • Upgraded jimp from 0.6.0 to 0.6.4. Addressed in #4097.
  • Removed method-override. Addressed in #4209.
  • Upgraded node from 8.2.1 to 8.9.3. Addressed in #4001.
  • Downgraded parse-domain from 2.1.7 to 2.0.0 to avoid a regression released in parse-domain. Addresses #3717.
  • Upgraded pluralize from 3.1.0 to 7.0.0. Addressed in #4205 and #4206.
  • Upgraded semver from 5.6.0 to 5.7.0. Addressed in #4112.
  • Upgraded send from 0.16.2 to 0.17.0. Addressed in #4134.
  • Upgraded supports-color from 5.5.0 to 6.1.0. Addressed in #4150.
  • Removed tar-fs. Addressed in #4148.
  • Upgraded term-size from 1.2.0 to 2.0.0. Addressed in #4148.
  • Upgraded tmp from 0.0.33 to 0.1.0. Addressed in #4111.
  • Upgraded trash from 4.3.0 to 5.2.0. Addressed in #4140.
  • Upgraded url-parse from 1.4.4 to 1.4.7. Addressed in #4110.
  • Upgraded widest-line from 2.0.1 to 3.1.0. Addressed in #4139.
  • We updated and removed some dependencies used for development.

3.2.0

Released 3/15/2019

Features:

  • cy.visit() has been expanded to allow options url, method, body, and headers. This allows cy.visit() to be called with a POST method or with headers like Accept-Language or Authorization. Fixes #1500, #1904 and #908.
  • cy.request() now allows any valid HTTP method to be used including TRACE, COPY, LOCK, MKCOL, MOVE, PURGE, PROPFIND, PROPPATCH, UNLOCK, REPORT, MKACTIVITY, CHECKOUT, MERGE, M-SEARCH, NOTIFY, SUBSCRIBE, UNSUBSCRIBE, SEARCH, and CONNECT. Addresses #1302
  • The --browser argument of the Command Line and the browser argument of the Module API have been updated to allow passing a <path>. Addresses #1026.
  • cy.type() now accepts {home} and {end} special character sequences to move the cursor to the start or end of a line. Addresses #2033.
  • The Cypress Chrome extension now has a static ID of caljajdfkjjjdehjdoimjkkakekklcck. This allows Cypress to be added to your allowed extensions for those working under corporate policies that prohibit extensions. Addresses #3673, #1239 and #2494.

Bugfixes:

  • Problems logging in through GitHub in the Test Runner have been fixed. The GitHub login window no longer shows the browser support banner and the "Authorize cypress-io" button is no longer disabled. Fixes #1251.
  • Fixed an issue when testing applications using older versions of jQuery. They now no longer throw item.first is not a function. Fixes #2927.
  • Cypress now detects more instances of browser installations. Fixes #3183 and #3218.
  • Fixed issue with loading fixture files containing more than one . in their filename while not specifying the file extension. We are also displaying a clearer warning when a fixture file cannot be found. Fixes #1402.
  • All third party @types have been moved from Cypress dependencies into devDependencies. This should fix situations where user's type dependencies were conflicting with Cypress's third party type definitions. Fixes #3371 and #1227.
  • Cypress.config('baseUrl') has been updated to no longer strip singular / at the end of urls and instead only strip instances of multiple /. Fixes #3540.
  • The prompt to "Restore pages?" is no longer displayed within Chrome upon restarting a crashed Chrome window. Addresses #2048.
  • cy.wrap() no longer throws an error when a non-jQuery wrapped DOM element is passed in as an argument. Fixes #3549.
  • Fixed issue where all arguments passed to setTimeout or setInterval were not properly passed on to the target function. Fixes #3592.
  • .filter() has been updated so that when called with a function, the options are now properly read. Fixes #3315.
  • Cypress's recognition of websites attempting framebusting has been updated to include framebusting code wrapped within (). #3267
  • When .its() returns undefined it no longer errors. It will now follow the same logic as all other commands and only fail when directly by a .should() command with an assertion that is not met. Fixes #1531.
  • When cy.wrap() is followed directly by a .should() command, cy.wrap() will now retry when its argument evaluates to undefined until it meets the requirements of the assertion or the cy.wrap() command times out. Fixes #3241.

Misc:

  • We now display a warning when passing an argument to --spec that is not surrounded by quotes "" recommending that the argument instead be surrounded by quotes. In some cases, not providing quotes can cause the arguments to be read in a way that is likely not its intended use. Addresses #3318 and #2298.
  • The number of logs printed when installing Cypress in docker has been reduced. Partially addresses #1243.
  • The seeded Kitchen Sink examples have some new examples showing how to add a message to assertions, how to compare the text content of two elements, and how to make assertions about data attributes. The examples also have some small typo fixes. Fixes #502. Addressed in #3272, #3287, and #3700.
  • We now only mount internal servers on loopback. Addresses #3712.
  • The instructions in Cypress's update window now include yarn update instructions alongside npm. Addresses #2871.
  • The spec file's font weight has been increased within the Test Runner for better readability. Addressed in #3065.
  • We improved the error message displayed when a record key is unrecognized during cypress run. Addresses #1449.
  • We improved the typings when using Cypress.on to listen for window.alert events to allow for Sinon.stub. Fixes #3451.
  • Fixed typo in typing for .trigger options. Addressed in #3588.

Documentation Changes:

  • New Retryability doc #1278
  • Updated --browser and browser args to accept path #1419
  • Document how to accept or reject project transfers #1474
  • Updated docs on explain how to run Chrome and Chromium browsers #1339
  • Added {home} and {end} character sequences to cy.type() doc. Also wrote better description of what {downarrow} and {uparrow} character sequences actually do. #1347
  • Added all newly supported HTTP methods to cy.request() doc.
  • Add new section to Troubleshooting doc explaining how to allow the Cypress Chrome extension.
  • Fixed code example for google analytics stubbing #1454

Dependency Updates

  • Upgraded @cypress/commit-info from 2.1.1 to 2.1.2. #3327.
  • Upgraded @cypress/xvfb from 1.2.3 to 1.2.4. #3328.
  • Upgraded @ffmpeg-installer/ffmpeg from 1.0.15 to 1.0.17. #3329.
  • Upgraded cachedir from 1.3.0 to 2.1.0. #3660.
  • Upgraded chalk from 2.4.1 to 2.4.2. #3362.
  • Upgraded chokidar from 1.6.0 to 1.7.0. #3363.
  • Upgraded coffee-script from 1.12.5 to 1.12.7. #3365.
  • Upgraded commander from 2.11.0 to 2.19.0. #3366.
  • Upgraded common-tags from 1.4.0 to 1.8.0. #3368.
  • Upgraded compression from 1.7.2 to 1.7.3. #3379.
  • Upgraded cookie from 0.2.4 to 0.3.1. #3380.
  • Upgraded cookie-parser from 1.4.3 to 1.4.4. #3443.
  • Upgraded dependency-tree from 6.4.0 to 6.5.0. #3381.
  • Upgraded electron-context-menu from 0.8.0 to 0.11.0. #3383.
  • Upgraded electron-packager from 9.0.1 to 9.1.0. #3384.
  • Upgraded electron-positioner from 3.0.0 to 3.0.1. #3385.
  • Upgraded errorhandler from 1.1.1 to 1.5.0. #3386.
  • Upgraded express from 4.16.2 to 4.16.4. #3409.
  • Upgraded extract-zip from 1.6.6 to 1.6.7. #3410.
  • Upgraded glob from 7.1.2 to 7.1.3. #3412.
  • Upgraded image-size from 0.5.5 to 0.7.2. #3413 and #3500.
  • Upgraded is-ci from 1.0.10 to 1.2.1. #3414.
  • Upgraded lodash from 4.17.4 to 4.17.11. #3344.
  • Upgraded mocha-junit-reporter from 1.17.0 to 1.18.0. #3417.
  • Upgraded moment from 2.23.0 to 2.24.0. #3433.
  • Upgraded morgan from 1.3.0 to 1.9.1. #3434.
  • Upgraded node-uuid from 1.4.1 to 1.4.8. #3436.
  • Upgraded parse-domain from 2.0.0 to 2.1.7. #3437.
  • Upgraded request from 2.87.0 to 2.88.0. #3444.
  • Upgraded request-progress from 0.3.1 to 0.4.0. #3445.
  • Upgraded request-promise from 4.1.1 to 4.2.4. #3446 and #3476.
  • Upgraded return-deep-diff from 0.2.9 to 0.3.0. #3447.
  • Upgraded send from 0.14.2 to 0.16.2. #3448.
  • Upgraded ssl-root-cas from 1.2.5 to 1.3.1. #3449.
  • Upgraded supports-color from 5.1.0 to 5.5.0. #3464.
  • Upgraded through from 2.3.6 to 2.3.8. #3465.
  • Upgraded tmp from 0.0.31 to 0.0.33. #3466.
  • Upgraded tough-cookie from 2.4.3 to 3.0.1. #3477 and #3659.
  • Upgraded trash from 4.0.0 to 4.3.0. #3478.
  • Upgraded underscore.string from 3.3.4 to 3.3.5. #3480.
  • Upgraded yauzl from 2.8.0 to 2.10.0. #3481. Potentially fixes #3515.
  • We also updated many dependencies used for development and removed some unused dependencies.

3.1.5

Released 1/30/2019

Bugfixes:

  • Fixed issue where the onLoad event was never being called when calling cy.visit() on the url Cypress is currently navigated to. Fixes #1311.
  • Fixed regression introduced in 3.1.4 that caused an InvalidStateError when visiting a page with an XHR request with a responseType other than text or ''. Fixes #3008.
  • Fixed several issues in Chrome* versions >= 72 in the Cypress proxy that caused using cy.visit() with localhost to fail, or using localhost inside of the baseUrl configuration option. Fixes #1872 and #3252 and #1777.
  • Fixed another issue in Chrome* versions >= 72 where a scrollable command log would cause the entire application to be scrollable. Fixes #3253.
  • Fixed not correctly passing the timeout option for cy.request(). This should fix some instances where large timeout values would cause ESOCKETTIMEDOUT errors. Fixes #2669.
  • Fixed issue where Cypress would inject a script tag before the <!DOCTYPE> declaration when the document only contained the doctype declaration. Fixes #2617.
  • The error message when visiting a site with an invalid content-type now prints the correct content-type of the response Cypress received from the web server. Fixes #3101.
  • Fixed issue where an internal layout.html file would inadvertently get loaded instead of the spec file. Fixes #2891.
  • Fixed issue where the Chromium browser was not detected in Linux due to Cypress not distinguishing between Chrome and Chromium browsers with the same version. Fixes #1400.
  • Fixed issue of Cypress being unable to play videos with autoplay. We now pass the --no-user-gesture-required command line switch to Chrome. Fixes #2376.
  • We now pass the Chromium command line switches --use-fake-ui-for-media-stream and --use-fake-device-for-media-stream to Chrome by default in order to better support testing webcam functionality. Fixes #2704.
  • Updated filenames allowed for screenshots to allow more characters that are valid. Fixes #3052.
  • Fixed TypeScript error caused by dtslint dependency introduced in 3.1.4. Fixes #3024 and #3136.
  • Improved error message displayed for cypress cache to not display [object Object] and made --help labels more descriptive. Fixes #2589.
  • Using .clear() on inputs of type 'date' is now working. Fixes #2738
  • Fixed issue where event was undefined when using an onload event handler. Fixed #2859

Misc:

  • Improved errors shown when opening a project in the Desktop Application. The design is more readable and the error's stack trace is now expandable. Addresses #2955.
  • Improved experience of search in Desktop Application when there are no results. Addresses #3146.
  • Updated tooltip content so that it no longer flows outside of the tooltip in the Test Runner when displaying longer routes. Fixes #2980.
  • Added word labels beside icons in Desktop Application for 'Support' and 'Docs' links. Addresses #3091.
  • Updated the CLI to no longer silence important stdout from cypress version, cypress cache list etc commands. Addresses #2705.
  • Fixed incorrect type definition for options usage for .then(). Addresses #3075.
  • Fixed incorrect JSDoc comments in type definition for .focus() and better formatted comments in type definitions. Addresses #2975 and #2954.
  • Updated error messages to include single quotes when displaying written test code. Addresses #2684

Documentation Changes:

  • Added example on how to use a fake video for webcam testing to Browser API doc.

Dependency Updates

  • We've begun automating our dependency update process in order to avoid accidental dependency updates. Addresses #2990 and #3025.
  • Upgraded sinon from 3.2.0 to 3.3.0. Addresses #1328.

3.1.4

Released 12/25/2018

Merry Christmas everyone!

Bugfixes:

  • Fixed a very longstanding (!) issue where .click() would fail to click the center coordinates of elements with style display: inline. Cypress would instead report that the element was being covered causing the error: cy.click() failed because this element is being covered by another element. Fixes #210.
  • We now no longer abort XHR's which have their .abort() method called but are already complete. This fixes an edge case where complete XHR's were having their disposer function called in frameworks like rxJS which lead to Cypress accidentally re-aborting the XHR's after they were complete. Fixes #761.
  • Fixed issues involving XHRs displaying as 'aborted' in the Cypress Command Log when they were not actually aborted. Fixes #1652.
  • We no longer abort XHR request during the page's unload event and allow the browser to handle natively calling abort. Fixes #2968.
  • Fixed an issue where Cypress's devDependencies were being included in the Windows binary. Fixes #2896.
  • Fixed issue where XHR's onreadystatechange was not receiving the proper event arguments. Fixes #2925.
  • We now properly strip leading paths of files on uncaught errors from Windows OS. Fixes #2936.

Misc:

  • Removed the word 'already' from the Cypress install message in order to be less confusing. Adresses #2754.
  • Fixed incomplete type definitions for cy.request. Fixes #2305.

Dependency Updates

  • Upgraded commit-info from 2.0.0 to 2.1.1. Fixes #2848.
  • Upgraded lodash from 4.17.10 to 4.17.11. Fixes #2929.

3.1.3

Released 12/03/2018

Bugfixes:

  • Fixed regression introduced in 3.1.1 with requestAnimationFrame that caused some animations not to run. Fixes #2725.
  • Fixed regression introduced in 3.1.2 that caused DOM elements passed to cy.wrap() to no longer yield the proper jQuery array instance. Fixes #2820.
  • Fixed regression causing invocations of cy.clock() to error on subsequent tests. Fixes #2850.
  • Fixed issue where a fix included in 3.1.2 did not pass the windowsHide argument to the proper options. Fixes #2667 and #2809.
  • Passing .check({ force: true }) no longer requires the checkbox or radio to be visible. Fixes #1376.

Misc

  • Updated types to support promises as arguments within cy.wrap. Fixes #2807.
  • We now expose all jQuery methods and values onto Cypress.$. Fixes #2830.
  • cy.wait() now accepts a separate timeout option for requestTimeout and responseTimeout. Fixes #2446.

Documentation Changes:

  • Added requestTimeout and responseTimeout options to cy.wait()
  • Added 'History' table to cy.wait()
  • Added 'Alias' for assertions that are aliases of each other to Assertions

Dependency Updates

  • Upgraded nodemon from ^1.8.1 to ^1.8.7. Fixes #2864.
  • Upgraded request from ^2.27.0 and ^2.28.0 to ^4.0.0, Fixes #2455.

3.1.2

Released 11/18/2018

Bugfixes:

  • Fixed a regression caused in 3.1.1 where we attempted to set a property on an invalid cookie sent from a server. Fixes #2724.
  • Fixed Cypress not correctly aborting long running connections (such as server sent events) on proxied requests. Fixes #2612.
  • Fixed bug where tests were failing due to assertions causing Cypress to accidentally iterate through cross-origin iframes. If you were seeing "random" cross-origin errors, this likely fixes those issues. Fixes #2784.
  • Fixed incorrectly setting charCode and keyCode when using .type() on a few different special characters such as {. Fixes #2105.
  • Fixed another regression in 3.1.1 where passing undefined to a setTimeout caused Cypress to error. Fixes #2719.
  • Fixed a bug in node core where Cypress would not show up in Windows for users on node >= 11. Fixes #2667.
  • Fixed a bug with trashing assets in linux that caused recursive .Trash files to show up. We now have opted to actually rm -rf the files in linux because trashing is too inconsistent between linux distros. Fixes #2742.

Misc

  • Added type definitions for Cypress.moment(). Fixes #2746.
  • We now display better error messages in the CLI when runs exceed billing limits. Fixes #1689.

Dependency Updates

  • Removed progress #2733.

3.1.1

Released 11/2/2018

Features:

  • You can now pass a flag option to cy.writeFile(). The following flags are available. Fixes #1249.
  • There is a new CYPRESS_DOWNLOAD_MIRROR environment variable for installing Cypress at a mirror url. Fixes #2609.
  • The Module API now returns the runUrl from cypress.run(). Fixes #2596.
  • Specs now properly display as focused when navigating through specs via the keyboard. Fixes #2273.
  • Tasks registered in the plugins file with the 'task' event are merged with any tasks registered by previous calls to on('task'), instead of overwriting the previous tasks. Fixes #2284.

Bugfixes:

  • Fixed a bug where Cypress would error when a secure cookie flag was set and then expired from an HTTPS url without the subsequent secure flag. Due to the way Cypress was constructing the url, this would fail to actually remove the cookie. Fixes #1264, #1321, #1799.
  • We now truncate filenames for screenshots to not exceed 255 characters in length. Previously there were cases where the screenshot filename would exceed 255 characters and error. Fixes #2403 and #2665.
  • Fixed issue when using cy.writeFile() and passing an object to a .json file. The object is now correctly written to the JSON file instead of a string. Fixes #2373.
  • We updated how we handle trashAssetsBeforeRuns behavior. We now trash the contents of the screenshotsFolder and videosFolder directories instead of trashing the directories themselves. This helps maintain any file access permissions for the directories. Fixes #1943 and #2600.
  • Fixed bug where mocked Dates using cy.clock() would not be an instance of Date. Fixes #2570.
  • Directories within specs whose names contain . are now correctly read as directories instead of spec files within the Test Runner. Fixes #2423.
  • Cypress no longer automatically takes screenshots of skipped tests. Fixes #2368.
  • Fixed an issue where returning/resolving undefined from a cy.task() handler resulted in an incorrect runtime error. Fixes #2553.
  • Update modifyObstructiveCode to account for framebusting techniques that use window.frameElement, so that Applications using this technique will run properly in Cypress. Fixes #2582.
  • Fixed bug where only the first DOM element of an array of DOM elements would be blacked out after being passed as argument to blackout within cy.screenshot(). Fixes #2508.
  • We fixed an issue involving timers after running cy.screenshot(). Fixes #2432.
  • The Test Runner now retries node-originated errors from our internal API requests. Fixes #2341
  • Fixed issue with multiple readyStateChanges with the same readyState. Fixes #1150.
  • Fixed Type error being thrown for users using TypeScript 3. Fixes #2363.

Misc

  • We are now collecting more environment variables from runs when run in Semaphore, GitLab, Bitbucket, Team Foundation Server, Codeship, and Shippable. Fixes #2460, #2358, #2343, and #2453.
  • The Test Runner's search now resets when switching between projects. Fixes #2512.
  • Fixed internal Cypress tests. Fixes #2606.
  • Replaced use of new Buffer with Buffer.from. Fixes #2626.
  • Allowed autoScrollingEnabled to be saved in state.json. Fixes #2476.
  • Fixed internal test error beforeSpecRun is not a function. Fixes #2401.
  • Switched our internal tests to use CircleCI workspaces. Fixes #2398.
  • Update TypeScript definition for cy.screenshot() to include screenshot specific options. Fixes #2654.
  • URLs printed within the CLI will now display as the color blue. Fixes #2493.
  • We began bulk converting some of our codebase from CoffeeScript to JavaScript. Fixes #2686 and #2687.
  • We updated some of our internal ESLint rules to be more strict and also to help with CoffeeScript to JavaScript conversions. Fixes #2688.

Documentation Changes:

Dependency Updates

  • Upgraded common-tags from ^1.4.0 to ^1.8.0 #2415
  • Upgraded @cypress/browserify-preprocessor from 1.1.0 to 1.1.1 #2513
  • Upgraded lolex from ^1.5.2 to ^3.0.0

#2570

  • Upgraded @types/jquery from 3.2.16 to 3.3.6

#2363

  • Upgraded zunder from 5.6.5 to 6.1.1 #2541

3.1.0

Released 8/13/2018

Summary:

  • Cypress can now run tests in parallel across multiple virtual machines, or can be parallelized on a single machine. Cypress will automatically figure out, detect, and load balance all of your specs in the fastest and most efficient way possible. There is no configuration other than passing a --parallel flag and spinning up multiple machines on your CI provider. From our experiments you can expect to see approximately 40% reduction in overall run time per machine you add. However, attempting to run in parallel on a single machine requires server grade hardware with dozens (or even hundreds) of CPU's and GB of RAM to run efficiently. A much better and simpler approach is to use a cluster of docker containers that are all isolated from each other. Any standard CI service (CircleCI, TravisCI, etc) comes with the ability to do this. We automatically tap into their environment variables to make parallelization possible without you having to configure anything.
  • Beyond parallelization, you now have the ability to group multiple runs with each other so that they show up together (grouped) in the Dashboard. This enables you to test different applications, groups of specs, or different environments (like development, staging, production) and see all of the results together. We know how important cross browser testing is to everyone, so we built this to lead directly into aggregating the results of multiple browsers into a single run.
  • The Dashboard Service has been updated to show you more visual information about what happened during a run. You can see how specs were parallelized and you can calculate the effect of adding or removing machines to help reduce the overall run time.

Features:

Bugfixes:

  • We've finally tracked down the source of specs "hanging" and failing to start when running Electron. We finally tracked it down to a bug in Electron itself with setting menu when using offscreen rendering. Fixes #2322 and #2294 and #1235 and #1333.
  • Clicking on svg elements is now working. 3.0.2 introduced a bug that would throw an 'illegal invocation' error. Fixes #2245 and #2252 and #2258 and #2277 and #2288.
  • Fixed a regression in 3.0.2 that caused typing {enter} not to submit a form when there were <button> elements other than type='submit'. Fixes #2261 and #2326.
  • Fixed a small visual bug where failed commands were not aligned to other commands. Fixes #2314.
  • Fixes a race condition where async electron browser commands came in after the renderer had been destroyed, causing failures. Fixes #2321.

Misc

  • When recording to the Dashboard Service, we now provide estimated durations per spec directly within the standard output, as long as the spec has had enough run history for this to be determined. Fixes #2276.
  • When using the new --parallel or --group feature, we now visually indicate that to you in the standard output when recording. Fixes #2275.
  • We have added support for more CI providers to automatically detect and show more relevant information in the Dashboard, instead of showing 'Unknown'. Fixes #2146.
  • We have added better checks and reliability for detecting runs in Jenkins. Fixes #1990.
  • The built in cypress-browserify-preprocessor was bumped to 1.1.0. This supports more JavaScript features by default, including async/await, object rest spread, and class properties. Fixes #2254.
  • cypress run now creates a new browser profile per run per browser, but keeps the same browser profile when run via cypress open. This means you can run Cypress locally over multiple processes and the browser profiles will not conflict with each other. Fixes #1566.
  • The Desktop-GUI has been updated to get the new routes provided by the Cypress API for runs. Fixes #2189.
  • Cypress now retries multiple times (with a backoff strategy) when communicating with our API fails while recording runs. This will provide better feedback in situations when the API is temporarily unavailable. Fixes #1590.
  • When Cypress retries due to an API timeout or failure it now displays a very nice message indicating to you the delay and number of retries left. Fixes #2280.
  • We've added parallelization to our own internal tests for the driver and the desktop-gui. We've been able to reduce the number of concurrent instances our tests use by 4, and shaved about 6 minutes off of each build. Faster with less resources. Fixes #2325.

Documentation Changes:

3.0.3

Released 7/30/2018

Bugfixes:

  • Reverted the Chrome argument that disabled RootLayerScrolling which was used to prevent the application under test from "shaking" due to a bug in versions 66 and 67. This workaround inadvertently created a different and much more severe bug in Chrome 68 that would miscalculate pointer coordinates. This led to Cypress giving confusing errors about elements being covered up on action. This is still a bug in Chrome, and is fixed in Canary but has not yet been released to the stable Chrome 68 channel. Nevertheless, removing the RootLayerScrolling flag does fix it. We did several experiments to try to ensure that the "shaking" behavior does not exhibit itself in Chrome 68. We have limited the --disable-blink-features=RootLayerScrolling flag to Chrome 66 and Chrome 67. Fixes #2223 and #2215 and #2037.
  • Fixed another bug with Chrome that caused the chromeWebSecurity: false option to not be respected. This was due to Chrome progressively rolling out trials of a new option that attempts to isolate sites (and iframes) in their own child process if their origins are different. Fixes #1951 and #2001 and #715.
  • Fixed Cypress hanging in CI due to excessive and unnecessary globbing. We finally tracked down this issue which made it appear as if Cypress was "hanging" after closing a spec file and then attempting to open the next one. Fixes #2183 and #1905 and #1912.
  • We are now properly serializing nested object arguments when using the Module API via cypress.open() or cypress.run(). Passing nested objects in reporterOptions now works correctly. This is especially useful when using mocha-multi-reporters. In addition to fixing the Module API, we are now also properly handling nested arguments from the Command Line. In order to pass nested objects within CLI params you must pass stringified JSON. This is useful for properties such as blacklistHosts. Fixes #1348 and #1357 and #2221.
  • Fixed a bug causing screenshots saved via cy.screenshot() to be in different folders when you ran using cypress open vs cypress run . Fixes #2091.
  • Fixed bugs with Electron losing focus when running headlessly via cypress run after navigation. Now the browser will always act as if it is focused no matter what and in all situations when running headlessly. If you were seeing focus related problems when running headlessly, this should fix them. Fixes issue #2190.
  • Fixed using when using cy.click() on an element that bound to the focus event while the browser was currently out of focus. We have now normalized all focus and blur events to behave the same as if the browser is always in focus. This should fix the other batch of blur and focus issues that users have been experiencing. Fixes #549 and #2198.
  • Fixed the vast majority of known issues with .type(). Fixes #1241.
  • Using .type() on an input of type email or number will no longer fire unnecessary additional blur and focus events. Fixes #2210.
  • Fixed .type() breaking on chains when passing the same options references. Fixes #365.
  • Fixed an issue with .clear() not behaving the same as cy.type('{selectall}{backspace}'). Fixes #420.
  • Fixed a bug with issuing an additional blur and click event when chaining .clear().type(...). Fixes #593.
  • Fixed many issues with typing into [contenteditable] elements. WYSIWYG, Draft.js based, and other HTML editors now work correctly. Fixes #596 and #1686 and #2096.
  • The caret now correctly moves on [contenteditable] elements. Fixes #1108.
  • Fixed .type() inserting a rogue <br> tag after the first letter in [contenteditable] elements. Fixes #1926.
  • Fixed issue where change events with .type() would not fire correctly for many more situations and edge cases. Fixes #651.
  • Fixed issues with typing into JS based text-mask plugins. Basically anything that would alter the .value in response to certain events now works correctly. Fixes #940 and #1684.
  • Using .clear() on an input with a maxlength attribute now works. Fixes #1002 and #2056.
  • Fixed issues with .type() not firing the change event on input[type=number]. Fixes #1171.
  • Fixed other event related issues with .type() that were not firing correctly. Fixes #1209.
  • Fixed even more issues with .type() not inserting characters on input[type=number]. Fixes #1381.
  • Fixed not being able to type negative numbers into input[type=number] elements. Fixes #2173.
  • Fixed selectionStart and selectionEnd with .type() when using {leftarrow} or {rightarrow}. Fixes #1234.
  • Fixed not being able to type into a datetime-local input. Fixes #1366.
  • Calling .focus() or .blur() on cy.window() no longer fires blur events on the activeElement or causes it to become body. Fixes #2234.
  • Using cy.get('body').click() now correctly changes the activeElement back to body and causes the existing activeElement to receive blur. Fixes #2236.

Misc:

  • We've loosened up the restrictions surrounding what we consider a typeable element. You can now type into inputs with invalid type attributes because the browser does still consider them regular text inputs and allows you to type into them. Fixes #586.
  • Using {uparrow} or {downarrow} with .type() on an input[type=number] element now increments or decrements the number configured via the step attribute. Fixes #2110.
  • Using {uparrow} or {downarrow} with .type() now correctly moves the cursor on textarea or [contenteditable] elements. Fixes #2187.
  • You can now use .focus() or .blur() on cy.get('body'). Fixes #2235.
  • Bumped the version in junit reporter dep from 1.12.1 to 1.17.0 which adds a few new features. Fixes #2238.
  • Bumped deps that npm audit was yelling about. Fixes #1701.
  • Runs showing up in the Runs tab now more closely match how they display in the Dashboard. Fixes #2060.
  • Added more debug logs. Fixes #2108.
  • When recording to the Dashboard we now more accurately collect commit details when it is missing from the local git data. Fixes #2129 and #2073.
  • Updated build in example kitchen sink to 1.0.2. Fixes #2139.
  • Updated the json-schema describing videoCompression. Allowing it to be a boolean. Fixes #2140.

Documentation Changes:

3.0.2

Released 6/28/2018

Bugfixes:

  • Screenshots taken with cy.screenshot() on 2x DPI are now taken at the correct full size. Fixes #1857 and #2018.
  • Windows users no longer exit with EPIPE errors when running cypress run in newer versions of Node. Fixes #1841 and #2044.
  • Fixed issue where applications programmatically stealing focus would lead to slow runs in Electron when running via cypress run. #1909 and #1892.
  • Electron no longer reports the browser as out of focus when running via cypress run. Fixes #1939.
  • Modified the document.hasFocus() method to return true if the top window (Cypress window) is in focus. This should now correctly match how your application behaves outside of Cypress. Fixes #1940.
  • Fixed issue where Cypress would unnecessarily scroll when attempting to locate elements with position: sticky. Fixes #1475.
  • Fixed a bug where changing the integrationFolder in Windows would lead to errors with plugins. Fixes #1704.
  • Cypress no longer crashes when a 3rd party server sends invalid gzip content. Also fixed issues with incorrectly gunzipping multibyte characters which would potentially lead to serving invalid HTML or JS. Fixes #1396 and #1756.
  • The --silent flag should now be respected during npm install cypress on all OSes. Fixes #817.
  • Corrected a typo in the CLI for a warning message. Fixes #2038.
  • Fixed some areas of the Desktop GUI that did not display path names correctly in Windows. Fixes #1830.
  • The pluginsFile now supports an absolute path instead of just a relative one. Fixes #1837.
  • Fixed a regression introduced in 3.x.x where application code that used setTimeout with a string argument would see the error fn.apply is not a function. Fixes #1854.
  • Fixed issue where preprocessor errors were being swallowed. Fixes #1877.
  • Fixed issue where Cypress would hang indefinitely when starting a new spec when in cypress run mode. Additionally we have optimized the code path to not read in the local state.json unnecessarily. Fixes #2013 and #1912 and #1905 and #1890.
  • Fixed a couple regressions in the Dashboard where timed out runs stayed "Pending" forever. Fixes #1891 and #1952.
  • Fixed another Dashboard regression where an error would throw when recording tests and sending a large list of specs. Fixes #1901.
  • Fixed issue where videos would not be recorded when an object was returned from before:browser:launch when in the Electron browser. Fixes #1992.
  • Fixed an issue where Cypress would inject content into the <header> tag instead of the <head> tag. Fixes #2026.
  • Fixed an oversight where a specific framebusting check was not being properly stripped and removed by the default config option modifyObstructiveCode. Fixes #2030 and #2059.
  • Fixed icons visually shifting when tests were running in the Test Runner. Fixes #1983.
  • Server sent events now finally work correctly in Cypress. Fixes #1440 and #1111.
  • Time traveling snapshots now preserve the styles of empty <style> tags with programmatically inserted CSS rules. Fixes #1226.

Misc:

  • There are now several new CLI commands for interacting with the binary cache: cypress cache path, cypress cache list, and cypress cache clear. Fixes #1856.
  • We've added a new CLI flag: --no-exit for cypress run to keep the browser open after the tests finish running. Fixes #1871.
  • The CLI now respects config values and environment variables put in your .npmrc file. Fixes #1399 and #1853.
  • Significantly improved the performance of taking screenshots. #1863.
  • Node module dependencies updated. Fixes #1674 and #1942.
  • The bundled version of FFmpeg has now been bumped from 3.x.x to 4.x.x. This may help with some issues users were experiencing when recording videos. Fixes #1972.
  • Added more debug logs to FFmpeg to determine why FFmpeg compression sometimes causes Cypress to crash (mostly while running in Travis CI). Fixes #1971.
  • Several improvements to TypeScript typings. Fixes #1881 and #2007 and #1899 and #1902 and #1897 and #1907.
  • We improved error logging and the user experience around cypress verify. Fixes #1984.
  • We no longer log the skipping install message if the Cypress binary is already installed locally. Fixes #1985.
  • Now, by default, screenshots are nested within a folder with the name of the spec file that is currently running. Example - the spec named cypress/integration/foo/bar_spec.js will save screenshots inside of this directory: cypress/screenshots/foo/bar_spec.js/*. Fixes #1826.
  • Passing foo/bar/baz as the fileName arg to cy.screenshot() inside a spec, app.spec.js, will now result in the screenshot being saved to a nested folder path such as: cypress/screenshots/app.spec.js/foo/bar/baz.png. Fixes #1771 and #668.
  • We now append (failed) to the screenshot filename of screenshots taken automatically during test failure. Fixes #1923.
  • If multiple screenshots are taken during a test that will result in the same filename, their file paths are now appended with a number, i.e. test name (1).png. This prevents screenshot files with the same name from being overwritten. Fixes #1766.
  • Screenshot onAfterScreenshot and onBeforeScreenshot callbacks ar enow invoked for failed tests. They include a testFailure property to distinguish between automatic ones and your own use of cy.screenshot(). Fixes #2040.
  • There's now an after:screenshot plugin event you can use in your pluginsFile to work with screenshots after they are taken. This enables you to rename them, move their location, resize them, send them to a service, etc. Fixes #2039.
  • Added Cypress.browser object which contains information about the currently running browser. Fixes #1919 and #1961.
  • Added Cypress.spec object which contains information about the currently running spec. Fixes #1918.
  • URLs displayed in the Command Log during cy.visit() are no longer arbitrarily truncated at a set width. Fixes #1995.

Documentation Changes:

3.0.1

Released 5/30/2018

Bugfixes:

  • Seeded KitchenSink tests no longer fail. Fixes #1812.
  • The binary cache now correctly works and will not reinstall Cypress if an existing version is already installed. Fixes #1813.
  • Closing the Electron browser and then opening Chrome no longer causes cy.screenshot() to fail. Fixes #1820.
  • Fixed a bug with Windows users seeing crashes with tty.getWindowSize is not a function. Fixes #1815 and #1817.

3.0.0

Released 5/29/2018

Summary:

  • There is a new cy.task() command that enables you to go outside the browser to perform tasks directly in node. This will make it easy to setup, scaffold, seed, talk to your database, or anything else useful on a back end.
  • cy.screenshot() has been rewritten from the ground up. It now takes a screenshot of only the application under test by default. It also can take full page screenshots or element only screenshots. This is the first step of Cypress Dashboard support for screenshot diffing.
  • When running with cypress run we now run each spec file in isolation from others. We have rewritten our reporter to provide more details and provide a summary of the run at the bottom.
  • The Dashboard has been upgraded to make it easier to understand the results of each spec run. This was done in anticipation of providing you the ability to parallelize and load balance your spec files automatically in CI.
  • We are now capturing the performance and timings data of every test when using --record mode and are beginning to offer the first analytics and insights into the health of your tests on our Dashboard Service.
  • Cypress now caches globally per version which prevents it from being installed multiple times across projects.

Breaking Changes:

  • We now run each spec file in isolation from one another. This shouldn't technically break anything, but if you have set up your tests in a way that requires the state of a previous spec file, this could potentially break your tests. This will go a long ways towards reducing problems we were seeing with long runs in CI. Fixes #431, #681, #1589, #1539, and #1692.
  • The environment variable CYPRESS_BINARY_VERSION has been removed. You should use the equivalent environment variable CYPRESS_INSTALL_BINARY instead.
  • The environment variable CYPRESS_SKIP_BINARY_INSTALL has been removed. To skip the binary install, set CYPRESS_INSTALL_BINARY=0.
  • screenshotOnHeadlessFailure has been removed as an option in cypress.json. Instead you can now control this behavior directly with code by setting screenshotOnRunFailure to false within the new Screenshot API. Fixes #1140 and #1754.
  • trashAssetsBeforeHeadlessRuns has been renamed to trashAssetsBeforeRuns in our configuration. Fixes #1754.
  • videoRecording has been renamed to video in our configuration to be clearer and prevent confusion about recording to our Dashboard. Fixes #562.
  • Cypress no longer copies screenshots and videos to artifacts for CircleCI. Copying artifacts should be left up to the user to handle themselves in their circle.yml file. Fixes #1592.
  • The standard output has been redesigned to better visualize spec files running in isolation and to be more visually appealing. This may break any specialized logic written that expected the standard output to be structured in a specific way or contain specific words. Fixes #1588.
  • cy.screenshot() no longer takes a screenshot of the runner by default. Instead it will hide the runner, remove application scaling and then scroll to take a full page picture of your application.
  • before and after hooks within a support file now run before/after every spec file, instead of only once before/after the entire run. #681

Features:

  • There is a new cy.task() command for executing any arbitrary node code.
  • You can now run multiple specs by passing a glob to the --spec argument of cypress run. Fixes #263, #416 and #681.
  • There is a new Screenshot API and new cy.screenshot() options that allow you set defaults for how screenshots are captured, whether to scale your app, disable timers and animations, or which elements to black out in the screenshot. You can also set defaults for whether to automatically take screenshots when there are test failures or whether to wait for the Command Log to synchronize before taking the screenshot. Fixes #1424.
  • cy.screenshot() can now be chained off of commands that yield a DOM element and will only take a screenshot that element.
  • During install of cypress, the Cypress binary is now downloaded to a global cache. This prevents multiple projects from downloading the same Cypress version. Fixes #1300.
  • The seeded example_spec.js file has been replaced by an examples folder with several spec files. This more closely reflects the recommended use of Cypress - as smaller groups of tests split among many files that will now be run in isolation. The tests were also updated from ES5 to ES6. You can see all changes in the cypress-example-kitchensink repo Fixes #1460.
  • Cypress now watches all the plugins file's entire dependency tree to make iterating on plugins easier. Fixes #1407.
  • Videos will now be saved locally with a filename named after the associated spec file that it represents. Fixes #980.
  • The Test Runner now displays skipped tests differently than pending tests. #244.
  • Standard output now displays the number of skipped tests within the summary output during cypress run. #1559.
  • The url to view the run in the Dashboard is now printed to output during cypress run. #494.
  • We now print the browser and browser version run in the output during cypress run. #833.
  • The build number and url to CI for tests run within Drone are now captured and displayed on the run within the Dashboard. #1709.

Bugfixes:

  • Cypress no longer crashes when attempting to proxy a WebSocket connection that fails. Fixes #556.
  • Asserting that an attribute equals a falsy value no longer fails when the value was falsy. Fixes #831 and #1491.
  • Snapshots now ignore stylesheets with media="print". Fixes #1568.
  • Fixed issue where the Cypress window was being returned instead of AUT's window. Fixes #1436.
  • The close event now properly fires on file when manually closing the browser. Fixes #1560.
  • cypress.env.json is now being watched for changes. Fixes #1464.
  • Fixed issue when using TypeScript that caused namespace errors to be thrown. Fixes #1627.
  • Fixed error message on .type() and .clear() when typing into non-typeable elements or clearing non-clearable elements to accurately list the elements allowed. Fixes #1650.
  • Added Chrome flag --disable-blink-features=RootLayerScrolling to prevent the application under test from "shaking" in recent versions of Chrome. Fixes #1620.
  • Fixed issue where some TTY characters were not properly formatted in the terminal for Windows during cypress run. Fixes #1143 and #1550.
  • Removed an extraneous error display from Electron during cypress run about a "transparent titlebar" setting. Fixes #1745.

Misc:

  • We are now aggressively turning on colors when running in CI. If you're using Jenkins and do not have an ANSI color plugin installed, you can turn off colors with the NO_COLOR=1 environment variable. Fixes #1747 and #1748.
  • When running cypress run --record on forked PR's, we now detect that the Record Key is missing and do not fail the build. We will display a warning, but continue running the tests. Fixes #1193.
  • Searching in the Test Runner now filters out any non-matching folders. Fixes #1706.
  • Duplicate, subsequent logs in the Command Log are now collapsed and can be expanded to view all logs. Fixes #1580.
  • We now throw a descriptive error if an alias using .as() was defined starting with the @ character. #1643.
  • We now pass the --disable-device-discovery-notifications flag automatically. This should prevent Chromium browser from automatically trying to communicate with devices in your network, such as printers, while running tests. Fixes #1600.
  • We now pass any reporter errors along and provide a stack if a custom reporter you've provided does not exist. Fixes #1192.
  • You can now pass a normal object to cypress.open() or cypress.run() through the Module API, just as you would from the command line. #1442.
  • Added type definitions for Cypress.off and Cypress.log. Fixes #1110 and #1591.
  • Update type definitions for cy.screenshot() to reflect new changes to command's options. Fixes #1753.
  • The type definition for .filter() now correctly supports a function argument.
  • The type definition for .scrollIntoView() no longer errors when passed a duration option. Fixes #1606.
  • NODE_OPTIONS environment variables now print within the cypress:cli logs when running in DEBUG mode. Although using NODE_OPTIONS themselves should not be used due to #1676. Fixes #1673.
  • Cypress will error and exit with status 1 if no specs were found during cypress run. Fixes #1585.
  • We are now counting and aggregating the stats at the end of test runs separately from Mocha. Cypress considers a test to be the it and any accompanying hooks that run before or after a test. Cypress will correctly associate failures in those hooks to the test itself. We believe this more accurately models and just "makes sense". Fixes #1163.
  • The minimum viewport size has been lowered from 200 pixels to 20 pixels. Fixes #1169 and #1444.
  • Internal changes to our API structure and communication. Fixes #1170, #1413, #1415.
  • We output a much more complete test results object when using cypress as a module. Fixes #1248.
  • Added keywords to Cypress npm package. Fixes #1508.
  • Centered the animating icon in the Test Runner when 'running'. Fixes #1695.
  • We made some changes to internal references of headed and headless to be more specific and instead reference run mode and interactive mode. Fixes #1140.
  • The test name text is now selectable inside the Command Log. Fixes #1476.
  • Minor improvements to contributing docs and scripts. Fixes #1665.
  • We now collect Semaphore CI params and provide URL's to click into the builds from the Dashboard. Fixes #1785.
  • Config overrides coming from the CLI or environment variables are now validated the same way as if they've been set in cypress.json. Fixes #1783.
  • There is a better / more helpful experience around passing unknown options to the CLI. Fixes #837.
  • Display an empty message when there is no commit information on recorded runs. Fixes #1809.

Documentation Changes:

2.1.0

Released 3/1/2018

Bugfixes:

  • Prevent a bug with node-sass on OSX + Windows when local node version does not match bundled node when importing components directly in spec files. The underlying issue was because we forgot to update Buildkite and Appveyor when we upgraded Electron in 2.0.0. Fixes #1387 and #1390.

Features:

  • The Selector Playground has been updated to automatically prefer data-cy, data-test or data-testid attributes when providing the unique selector for an element. Additionally it now exposes a public API that you can use to control how it determines which selector to use. Fixes #1135.

Documentation Changes:

2.0.4

Released 2/25/2018

Bugfixes:

  • The cypress npm package now has the correct engines set in package.json. This was accidentally getting overwritten and caused errors when engineStrict was set in environments using node older than 8.2.1. Fixes #1373.

2.0.3

Released 2/21/2018

Bugfixes:

  • The runner no longer appears to "hang" if a before hook fails in a test with siblings. Previously the test would never generate a status and look pending forever. This was a visual bug only. Fixes #1343.
  • The Desktop GUI properly renders folders that contain specs in Windows now. Fixes #1335.

Misc:

  • The viewport dropdown helper in the Runner now displays string quoted JSON instead of an object literal. This better matches how you should write those options in cypress.json. Fixes #1350.

2.0.2

Released 2/17/2018

Bugfixes:

  • Fixed more edge cases where legitimate JavaScript code was being modified unexpectedly by the modifyObstructiveCode configuration. We've tightened up the RegExp even more and added 40 popular JS libraries to test against to ensure they are not modified. Fixes #1334.
  • Fixed an edge case when hooks such as beforeEach or afterEach threw an identical error message, Cypress would hang indefinitely and never finish running the tests. Fixes #674.
  • Fixed bug when Errors that threw with no arguments: throw new Error() and had their messages appended would duplicate the message over and over again. Fixes #1338.

2.0.1

Released 2/16/2018

Bugfixes:

  • Using cy.contains() with a RegExp argument is now properly escaped. Fixes #1322.
  • Fixed a runaway RegExp causing large .js files to take dozens of seconds to process. This was a regression caused by 2.0.0 with the new modifyObstructiveCode option. We've optimized the RegExp and the performance is back to being almost identical to transparently passing responses through. Fixes #1330.

2.0.0

Released 2/15/2018

Breaking Changes:

  • The built in default Electron browser has been bumped from version 53 to 59. This version represents the version of Chromium that Electron is using. In other words, running cypress run (or via Electron) will be like running your tests in Chrome 59 now. Although it is unlikely this would actually break any of your tests - it is technically possible they could behave differently. Fixes #895 and #891 and #823 and #860 and #1011 and #1252 and #1276.
  • We are now detecting and automatically stripping code that obstructs Cypress from being able to test your application. Specifically, we are removing JavaScript code that tries to prevent clickjacking and framebusting. We have written very conservative rules that do their best to only strip these specific JS snippets, but it is technically possible that it may unintentionally rewrite valid JS if they match the RegExp patterns. There is a new configuration option called modifyObstructiveCode that is true by default. If you are experiencing problems after upgrading, you can turn this off and this will disable modifying your JS code. If you were using Cypress and upon visiting your website you would experience seemingly "random" redirects - these problems should now be eliminated. Fixes #886 and #1245 and #1064 and #992 and #692 and #352.
  • We are now clearing the browser's disk cache each time it opens (before any tests run). This means that any files that have been cached from Cache-Control headers will be cleaned and removed. In the future, we will expose a new cy.clearCache() method to provide finer grained control of clearing the cache on a per test basis. But for now, this is an improvement. Fixes #1124.
  • The --spec option is now normalized against the current working directory cwd instead of the project that you are running Cypress in. That means passing a path from the command line to a spec file will now work even when the project path is not cwd. Fixes #1159.

Bugfixes:

  • blacklistHosts would occasionally not work if you were blocking a host that had previously cached a file. In this case, the browser would serve it from disk and not make an actual HTTP request. This issue has been solved by clearing the cache when the browser opens. Fixes #1154.
  • blacklistHosts is now correctly accepted via the --config CLI flag.
  • Spies and Stubs created with cy.stub() and cy.spy() will now retry their assertions when utilized from an alias. Fixes #1156.
  • Basic auth is working again in Chrome 63 and Chrome 64. We "for real" fixed it this time by adding auth headers automatically at the network proxy layer and bypassed the browser altogether. We automatically apply auth headers if you provide a username/password in the URL of a cy.visit(url). We also added a new auth option to specify the username/password using cy.visit(url, options). All of the requests that match the origin of the URL will have the Authorization: Basic <...> headers added. Fixes #1288.
  • Fixed domain parsing failures when local or localhost was not used as a tld. Fixes #1292 and #1278.
  • Removed the flag --disable-background-networking from the Chrome launch args to fix problems in CI that would throttle XHR callbacks by up to 20-30 seconds. Fixes #1320.

Misc:

  • We now properly display nested objects and arrays that come from cypress.json in the Settings tab in the Desktop Application.
  • There's now a proper "empty view" when you go to setup your project to record on our Dashboard and you have not created any Organizations. Fixes #1306.
  • Removed the message about private projects requiring a paid account in the future. There will be a free tier including private projects. Fixes #827.
  • We moved the location of the browser's disk cache. That means that if you've been using Cypress for a really long time - you may have built up quite a large existing cache (in the hundreds of mb). Before upgrading, you should open the browser and then manually clear the Cache. Or - if you have already upgraded to 2.0.0 delete the following folders:
    • OSX: ~/Library/Caches/Cypress
    • Linux: ~/.cache/Cypress
    • Windows: %APPDATA%\Cypress\cy\production\browsers

1.4.2

Released 2/4/2018

Bugfixes:

  • Fixed not being able to visit subdomains when using 2nd level sub domains. Fixes #1175 and #600.
  • Fixed not being able to visit private TLD's from the public suffix such as github.io, gitlab.io or herokuapp.com. These now all work correctly. Fixes #380 and #402 and #802 and #493 and #1161.
  • Fixed not being able to visit URLs that used *localhost such as http://app.localhost:8080. Fixes #451.
  • Mochawesome now works correctly and outputs files in all versions. Fixes #551.
  • Mochawesome will exit correctly with code 1 when a hook fails. #1063.
  • Fixed some incorrect typings with TypeScript. Fixes #1219 and #1186.
  • Fixed bug with custom 3rd party Mocha reporters relying on test.titlePath being a function. Fixes #1142.
  • Fixed typo in cypress.schema.json. Fixes #1167.
  • Fixed typo in CLI deps error about Docker. Fixes #1136.
  • Prevent NODE_ENV from being set to undefined when parent process did not have it defined. Fixes #1223.

Misc:

  • We have begun to aggregate failures and other stats ourselves instead of relying on Mocha reporters. Fixes #1141.
  • Added TypeScript should/and autocomplete and typings for Cypress events. Fixes #1187 and #1132.
  • Upgrade deps. Fixes #1174.

1.4.1

Released 12/26/2017

Bugfixes:

  • Using DEBUG=cypress:* now correctly outputs all debugging information on OSX and Linux. Previously output other then cypress:cli was ignored due to the CLI ignoring stderr from the binary. Fixes #921.
  • stdout is now captured correctly in Windows when recording to the Dashboard. Fixes #977 and issue #711.
  • Windows now forcibly displays colors correctly to the terminal. Fixes #1127.

Misc:

  • TTY is now handled correctly for Linux and OSX. This means that CI providers which turned off colors due to TTY being false will now display colors again such as TravisCI. Fixes #1126.
  • We now handle Xvfb exiting with a non zero status code and display that error to you. This should help with situations where Xvfb is misconfigured on the system. Fixes #1113.
  • We've added debug output for Xvfb when DEBUG=cypress:xvfb is enabled. Helpful when diagnosing problems with Xvfb. Fixes #1128.
  • We've added more TypeScript documentation for cy.* methods. Fixes #1117.
  • When developing on Cypress, we now start the process through the CLI to bring it into parity with how it works when used in production. Fixes #838.
  • Upgraded various CLI dependencies that were flagged for security warnings. There wasn't an actual security problem - just static analyzers complaining. Fixes #1103.

1.4.0

Released 12/19/2017

Features:

  • There is now a Search Bar in the Desktop GUI that enables you to filter the list of specs. Helpful for projects with a ton of spec files. Fixes #1098.

Bugfixes:

  • The seeded example_spec.js file no longer fails in Windows on the cy.exec() test. It now conditionally runs a command appropriate for Windows. Fixes #1097.
  • Trying to log in to Cypress no longer causes the app to crash. This area has had many more tests added. Fixes #1093.
  • Some minor improvements to TypeScript definitions around .then(). Fixes #1084.
  • The Selector Playground now works correctly in the Electron browser. Fixes #1086.

1.3.0

Released 12/17/2017

Features:

  • Plugins now emit a before:browser
    event exposing you the browser that will be launched and its launch arguments. This enables you to modify the arguments prior to launching the browser. You can also use these arguments to modify how Chrome runs and to also test Chrome extensions. Fixes #691 and #298.
  • We have launched a "CSS Selector Playground", a new UI button in the Test Runner that enables you to highlight elements in your application and receive a unique selector. You can also find elements by their text content. These mimics cy.get() and cy.contains() behavior. Additionally you can copy the generated Cypress command to your clipboard or output the generated selector to your console. This feature is in beta. It only works in Chrome (not in Electron). We are aware of some bugs in it, but it is good enough for use and feedback. Please check out issue #917, watch an animated gif demonstration, and leave any feedback you have there. Fixes #917.

Documentation Changes:

1.2.0

Released 12/14/2017

Features:

  • Plugins can now return a Promise and modify the yielded config to set new configuration values and environment variables. Fixes #1042 and #909 and #576.
  • There is a new userAgent option in cypress.json. This enables you to change the userAgent of the browser for the entire browsing session. Fixes #364.
  • There is a new blacklistHosts option in cypress.json that allows you to block requests made to those hosts. Blocked requests will respond with a 503 status code. This is useful for blocking 3rd party domains like Google Analytics. We have added a new 'Stubbing Google Analytics' recipe demonstrating this. Fixes #442.
  • Added chai assertions in TypeScript to generate autocompletion. Fixes #1073.

Bugfixes:

  • Updated TypeScript definitions to more accurately match the current Cypress API. Fixes #1050. Also note that if you were extending Cypress in TypeScript the Chainer interface changed. Please read {% issue '1048#issuecomment-351891910' %} to understand what you will need to update.

Misc:

  • Renamed environmentVariables to env in the Desktop GUI. Fixes #1052.
  • Cypress.config() now returns a complete set of configuration values. Fixes #509.
  • Added TypeScript typings for bundled Cypress tools like $, _, etc. Fixes #1046.
  • Some error messages were made more passive. Fixes #1025.

Documentation Changes:

1.1.4

Released 12/6/2017

Bugfixes:

  • Fixed an issue causing Chrome to timeout when attempted to be run through our docker containers. Fixes #1031.
  • Several TypeScript typings were added, updated and fixed. Fixes #1006.
  • Using a regular http:// URL now works when using the CYPRESS_BINARY_VERSION flag to point the binary at an external location. Fixes #1001.
  • File watching is fixed (again) when changing between specs. Fixes #1018.

Misc:

  • There is now a new CYPRESS_SKIP_BINARY_INSTALL flag you can pass during npm install which skips the binary installation after the cypress npm module completes its installation. Fixes #1005.
  • We now launch Chrome with --no-sandbox and --disable-gpu options in Linux. We will soon release a new plugin event that enables you to modify the browser arguments we use by default. This shouldn't cause issues with existing Linux users, and instead it should fix many CI setups that were using our Docker containers or your own home grown installed Chrome setup. Fixes #1021 and #1020.
  • Removed several aliases from our browser detector. These were not implemented properly and not needed - and thus only caused indirection. Fixes #1023.

1.1.3

Released 12/3/2017

Bugfixes:

  • JSON fixtures with unicode escape sequences are now parsed correctly. Fixes #964.
  • The default browserify plugin no longer fires watched:file:changed twice leading to an uncaught exception that was popping up in the console. Also fixed a minor state bug in the browserify package. Fixes #968.
  • Cypress no longer reports Electron as the browser that ran in the Dashboard Service when a different browser was run. Fixes #854.
  • Invalid cookie values no longer crash Cypress. Fixes #962.

Misc:

  • We are now bundling our own TypeScript definitions with the cypress npm module. You no longer have to install @types/cypress anymore. We'll continue to keep these updated with API changes. Fixes #856.
  • Uncaught exceptions originating from your application code and/or test code are now distinctly and clearly indicated in the error message. We included a link to our docs to educate you on how you can optionally disable Cypress from catching these. Fixes #825.
  • cy.visit() now accepts { failOnStatusCode: false } which enables you to visit pages that respond with a non 2xx status code. This brings it into parity with cy.request(). Fixes #421 and #574.
  • The contributing Readme's have been updated and improved for each package. Fixes #995.
  • Added utility methods Cypress.platform and Cypress.arch for returning the underlying OS information. Uses node's os module under the hood. Fixes #824 and #675.

Documentation Changes:

1.1.2

Released 11/26/2017

Bugfixes:

  • Fixed a regression caused by .type() adhering to maxlength incorrectly. Special character sequences were not respected. Now .type() works with special characters and implements a complete fix for maxlength. In addition to it working, it now fires all applicable browser events without modifying the actual input value. Fixes #955.
  • Errors coming from plugins now display correctly in the Test Runner. Fixes #945.

Documentation Changes:

1.1.1

Released 11/20/2017

Bugfixes:

  • Fixed a bug swallowing plugin errors due to undefined reject function. Fixes #934.
  • .type() now respects the maxlength attribute and will not type beyond it. Fixes #928.

1.1.0

Released 11/19/2017

Summary:

  • We have officially launched the new Plugins API interface. This adds a cypress/plugins/index.js file to new and existing projects. Using this file will enable you to modify the internals of Cypress running in the background node process. This means you will be able to use node APIs that are executed outside of the browser.
  • We have currently added only one event for modifying the test file preprocessor, but this paves the way for adding many more event types. You can now modify every aspect of how files are sent to the browser.
  • We have extracted the default Browserify preprocessor into its own package - @cypress/browserify-preprocessor. This is bundled with Cypress, but it is extracted so it can be used / modified by you to change the default options we pass to Browserify. Additionally, you can swap out this preprocessor for something else entirely.

Features:

  • There is now a Plugins API interface. Partially addresses #684.
  • We have added the first Plugin API event called: file
    . Fixes #580 and #581.
  • You can now customize the default Babe; configuration options for the Browserify preprocessor. Fixes #343 and #905.
  • CoffeeScript 2 is supported via modifying the default options for the Browserify preprocessor. Fixes #663.
  • You can swap out or extend the default preprocessor to do exotic things like compile ClojureScript into JavaScript. Fixes #533.
  • We have created a @cypress/webpack-preprocessor preprocessor npm package for you webpack users (because we are nice ￰ ゚リノ). Fixes #676.

Bugfixes:

  • cy.contains(selector, regexp) now works as intended. Fixes #801.
  • We no longer format fixtures in any capacity. This fixes a bug with improperly formatting fixtures in Windows. You should handle formatting fixtures yourself. Fixes #884 and #902.
  • cy.viewport() resolves if only width or only height changes. Fixes #873.
  • Cypress now auto reloads when spec files are modified in Windows. Fixes #712.

Misc:

  • There is a new --global option useful with cypress open to force Cypress to open in global mode. This is helpful when you have multiple nested Cypress projects but only want to install Cypress once in the root project. Fixes #889.
  • The module API accepts reporterOptions as an object literal like it does for the env and config properties. Fixes #899.

Documentation Changes:

1.0.3

Released 10/29/2017

Features:

  • The Test Runner now enables you to collapse folders when displaying a list of specs. Fixes #760.

Bugfixes

  • The onChange event callback for React now works (again) on input type number or email. Fixes #816 and #770.
  • Fixed error when recording and failing to parse the git commit message. Fixes #847 and #841.
  • Using a single space on: cy.type(' ') now works. Fixes #807.
  • cy.spread() can now be used on a collection of DOM elements. Fixes #735.
  • CLI shows help message when it is invoked with an unknown command like $(npm bin)/cypress foo. Fixes #641.

Misc:

  • Enable passing CYPRESS_RECORD_KEY without using the CLI by invoking the binary directly. Fixes #820.
  • Cypress binaries can now be pointed to a staging environment with CYPRESS_ENV=staging. Fixes #813.
  • The Test Runner displays the scrollbar correctly when the update banner is displayed. Fixes #803.
  • The branch name is now properly collected when recording in Buildkite CI. Fixes #777.
  • You can install the Cypress binary from any URL or file path using the CYPRESS_BINARY_VERSION environment variable. Closes #701.

Documentation Changes:

1.0.2

Released 10/13/2017

Bugfixes:

  • cy.type now correctly fires change events on React 16. Fixes #647.
  • Fixed some problems serializing objects during domain change caused by circular references. In this case zone.js was the culprit. Fixes #741.

Misc:

  • cy.scrollTo now logs its coordinates when options are used. Fixes #725.
  • You can now use environment variables that have a = character as values. Fixes #620.
  • There is now a new videoUploadOnPasses configuration option in cypress.json. Turning this off will only compress and upload videos on failures. This only affects projects which are setup to record to the Dashboard. Fixes #460.

Documentation Changes:

1.0.1

Released 10/10/2017

Bugfixes:

  • Prevent error during verification in the CLI on Linux / OSX. Also makes terminal colors work again. Fixes #717 and #718.

1.0.0

Released 10/09/2017

Summary:

  • 1.0.0 marks our transition out of a private beta and into a public beta. We've lifted all the restrictions for using Cypress. It is now accessible to everyone. Until we are out of beta, the Dashboard Service will continue to be free.
  • We will continue to follow semver from this point on (and also a bit more rigorously).
  • Cypress is now open source! This project is licensed under the terms of the MIT License.
  • We have a Contributing Guideline to help contributors get started as well as issues labeled first-timers-only for those wanting to contribute right away.
  • You can now use the Test Runner application without logging in. Some areas of the application still require logging in through GitHub, like the 'Runs' tab and viewing the project's 'Record Key'. The only places where login is required is when it interacts with our external servers. Naturally these places are optional and will not affect the local test writing + running experience.
  • We've removed the requirement of filling out an early adopter form and approval for logging in with GitHub to Cypress.
  • www.cypress.io has an all new design to help new visitors get started quickly and understand our future pricing more clearly.
  • We are still updating the docs to reflect the 1.0.0 release.

Features:

  • Windows is now supported. We have been running it successfully on EC2 and all of our example projects are also running in CI with AppVeyor. It is still super beta (we're aware of a couple issues already) and we're still updating our own infrastructure to manage and test it as comprehensively as we do OSX and Linux. We are only building a 32bit version of Windows, but will soon be building a 64bit as well. As of today the Windows binary is about 2x the size of what it will be. Unzipping takes a long time, we are sorry. Fixes #74 and #444.

Misc:

  • Added the Beta flag everywhere (since we are still technically in beta).
  • Reduced the frequency the app checked for updates. Fixes #713.
  • The CLI now sends arch parameter to the download server so we can build and serve multiple binaries for Windows + Linux.

Documentation Changes:

0.20.3

Released 10/06/2017

  • Improved verifying the binary for the first time after an npm install. Fixes #709.

0.20.2

Released 10/06/2017

Possibly Breaking Changes:

  • cy.exec() now trims output by default. That means if you were using an eq assertion the output will no longer have a trailing newline character \n. It's unlikely you are doing this, but it is possible you may need to update your assertions to remove this character. Fixes #697.

Bugfixes:

  • Handle errors gracefully when Electron window has been closed before paint events happen. Fixes #705.
  • Basic auth now works again. Fixes #573.
  • cy.exec() now properly sources each time it is invoked instead of only once. Fixes #694.

Misc:

  • cypress open now accepts the --project flag which enables you to use a root level Cypress installation and point to multiple sub projects. Fixes #661.
  • Prevent newer versions of Chrome from prompting you to save passwords and suppressed other extension related popups for Windows. Fixes #704.

0.20.1

Released 09/17/2017

Features:

  • cypress run now supports a --headed option so the Electron browser will display instead of running headlessly. This matches what you can already do in the GUI. Fixes #657.

Bugfixes:

  • Using Cypress on nested projects now correctly works. Fixes #635.
  • Using cy.type on Angular 2 apps now works. We're now firing the key property when typing. We've properly mapped all the special keys too.
  • onBeforeLoad now gets invoked when overriding cy.visit. Fixes #656 and #640.
  • Using multiple cy.visit back to back which only change the hash now properly wait for the hashchange event to occur before moving on. Fixes #652.
  • CLI now displays the correct overridden CYPRESS_BINARY_VERSION on first open. Fixes #659.
  • Fixed the incorrectly spelled chainer descendents. It is now correctly spelled as descendants. Fixes #642.
  • The visibility algorithm has been considerably improved. Should fix most if not all visibility problems. We accounted for CSS transforms, translations, and added a new branch of logic for position: fixed elements which should be much more accurate. Fixes #631.
  • The CLI now treats -h and --help and help as valid commands. Fixes #645.

Misc:

  • You can now pass an object literal as config when using Cypress as a node module. Fixes #639.
  • Passing --reporter can now reference an absolute path instead of just relative. Fixes #658.
  • The algorithm that ensures an element is not covered now calculates this at the center coordinates instead of the top left. This should yield more accurate results, be closer to the default expectations of users, and bypass fractional pixel problems we were having. Fixes #655.
  • Improved crash reporting when the binary throws an uncaught error.

Documentation Changes:

0.20.0

Released 09/10/2017

Summary:

  • 0.20.0 is our biggest technical release ever. It accounts for more than 2,000 commits. It's full of breaking changes we wanted to land prior to having our public 1.0.0 release.
  • You can now install Cypress as a real npm module, and even require it in your node files.
  • We rewrote the entire driver (we've all been there) and converted all 2,500+ tests to be run within Cypress itself.

CLI Changes:

  • You now use npm to manage Cypress versions like every other dev dependency.
  • Running npm install --save-dev cypress will automatically download the CLI + binary.
  • There is no longer a separate cypress install step, but this command still exists if you want to reinstall the binary for whatever reason.
  • No need to use cypress-cli anymore to manage Cypress versions. You will need to uninstall the cypress-cli by running npm uninstall -g cypress-cli.
  • The cypress module can be required in your own node projects to programmatically control Cypress the same way you would from the command line.
  • We've updated the installation experience to account for running locally and in CI so it doesn't generate a ton of logs in stdout.
  • The CYPRESS_VERSION environment variable is gone because now the version of the binary is controlled by the npm module version. If for some reason you want to download the binary of a different version you can use the new CYPRESS_BINARY_VERSION environment variable - but you'll get a warning message when the versions don't match.
  • If you install cypress globally using npm install -g cypress we will warn you that you should check this in as a devDependency but Cypress will continue to work in "global mode".
  • Cypress now verifies it can run on your system prior to actually running. It'll do this for each new version the first time you try to use it. Errors it receives from attempting to run will bubble up nicely, so you'll get output for things like missing linux dependencies instead of absolutely nothing like before.
  • We have better error handling and messaging around Xvfb failures.
  • There is a new --browser option that lets you change the browser that runs from the command line. This works the same way as changing the browser in the GUI, with the exception that any browser other than the default electron browser will not record a video. This is solvable but requires more work.
  • Whenever you encounter errors in the CLI we'll output helpful debugging information at the bottom of each error.
  • You can use the new environment variable DEBUG=cypress:cli to see debugging output from the CLI.

Breaking Changes:

  • We've removed the undocumented cy.chain() command. You should be able to safely remove this from your code. Fixes #456.
  • Updated Cypress._ to use lodash instead of Underscore. Fixes #548.
  • If any of an element's parent's overflow is 'hidden', we now calculate if the element is outside of the boundaries of that parent element and validate visibility assertions accordingly. This may cause some tests that were previously passing to now accurately fail. Fixes #410.
  • .select() should now look for the trimmed value inside of an <option></option>. This may change the content argument required to select the option you intended in your .select() command. Fixes #175.
  • When passing the option { force: true } to .click() and .type(), we no longer attempt to scroll the element into view. We've also disabled the check that the element is in view before clicking or typing. Fixes #553 and #537.
  • Cypress.Dom has been renamed to Cypress.dom.
  • Cypress.Log.command has been renamed to Cypress.log.
  • chai-jQuery assertions no longer change the subject when using prop, attr, and css with the 3rd argument (which acts as equality check). Fixes #605.
  • We now throw when a value other than cy is returned from a test or command function. Fixes #463.
  • Returning a promise in a custom command while also invoking cy commands now throws. Fixes #435.
  • cy.then() will now only pass its subject through when its callback function returns undefined. Previous it would pass the subject on null values as well.
  • cy.contains() can no longer be chained on subjects which aren't window, document or element. This brings it into parity with the new custom command rules and makes it much less "magical". It enforces you to use it in a much clearer way when querying the entire document.
  • Removed Cypress.addParentCommand(), Cypress.addChildCommand(), and Cypress.addDualCommand() in favor of the new custom command interface.

Features:

  • chai-jQuery assertions have improved error messaging, and have had their internal double assertions removed, and can now be made on raw DOM objects. Fixes #605.
  • chai-jQuery assertions now throw a nice error message when you're asserting on a non DOM object. Fixes #604.
  • New .trigger() command. Useful for triggering arbitrary events. Fixes #406.
  • New cy.scrollTo() command. Useful for having a container scroll to a specific position. Fixes #497 & #313.
  • New .scrollIntoView() command. Useful for scrolling an element into view. Fixes #498 & #313 & #519.
  • Input ranges are now more easily testable using the new .trigger() command. See our new recipe for details on how. Fixes #287.
  • Testing drag and drop is now possible using the new .trigger() command. See our new recipe for details on how. Fixes #386.
  • Updated .click() command to accept more position arguments. Fixes #499.
  • Added support to .type() for inputs of type date, time, month, and week. Fixes #27.
  • You can now pass a browser option to cypress run as --browser <browser name>. This enables you to run the same set of browsers when running from the CLI as when you're running from the GUI. Fixes #462 and #531.
  • cypress open no longer opens a detached process by default. Instead cypress open now accepts a new flag --detached, which replicates this behavior. Fixes #531.
  • We have all new docker examples you can check out.
  • The cypress npm package now checks the currently installed version on install and run and does not re-install Cypress if it is already installed. Fixes #396.
  • We've added a new Cypress.Commands interface to handle adding your own custom commands. Fixes #436.
  • You can now overwrite existing commands with Cypress.Commands.overwrite.
  • We removed an artificial delay that was being set in between commands. This means test commands now run faster.
  • You can now disable Cypress global exception handlers for your application. Fixes #254
  • Uncaught errors appearing in your spec files or support files are now properly caught, have the right exit code, and display correctly. Fixes #345
  • Cypress will now scroll past multiple elements that cover up an element to be interacted with. It also now factors in elements with position: sticky. Fixes #571 and #565.
  • Cypress now scrolls all parent containers (not just window) when attempting to check an element's actionability. Fixes #569.
  • Using Chai.js's assert interface now works correctly in your specs.
  • Screenshots are now taken during each runnable that fails. Errors in tests will happen there. Errors in hooks will also happen there. Previously a screenshot would only happen after everything (including hooks) ran. Fixes #394
  • cy.screenshot() now synchronizes its state with the reporter. This means you should see error messages (on the left side) on automatic screenshot errors.
  • Using mocha's async done callback now works properly.
  • You can now programmatically intercept and potentially turn off uncaught application errors from failing your tests.
  • You can now programmatically control whether you accept or cancel window.confirm() calls from your application.

Dependencies:

  • Updated Cypress.Promise (which is Bluebird) from version 2.9.25 to 3.5.0
  • Updated chai from version 1.9.2 to 3.5.0
  • Updated sinon from version 1.x to 3.2.0
  • Updated jQuery from version 2.1.4 to 2.2.4.
  • Removed chai-jQuery and rewrote it from scratch.

Deprecations:

Bugfixes:

  • Fixed busted internal timers that caused random timeouts, proxy errors, incorrect delays, and long pauses when loading the GUI. Fixes #572.
  • cy.route() now matches requests opened with lowercase methods. Fixes #607.
  • Fixed regression where multiple uses of cy.server() in a before hook was throwing an error. Fixes #80 and #510 and #595.
  • When editing cypress.json file, the dead browser page no longer appears. Fixes #492.
  • .type() should now work on inputs regardless of capitalization of type attribute. Fixes #550.
  • Fixed issues where .type() was not appending text properly. Fixes #503 and #568.
  • Fixed issue where .type() with type="email" inputs were throwing an error. Fixes #504.
  • Fixed issue where using .type() on an input with a type defined in uppercase (input type="TEXT") would throw an error and not type. Fixes #550.
  • Fixed issue with .clear() and type="number" inputs. Fixes #490.
  • Fixed issue where cy.exec() was failing when running Cypress in docker. Fixes #517.
  • Cypress CLI no longer requires git to install. Fixes #124
  • Improved the reporter's responsive design so controls still show at narrower widths. Fixes #544.
  • Commands text will no long cut off into ellipses when the Command Log is set to a wider width. Fixes #528.
  • Fixed issue where setting fixturesFolder to false would throw an error. Fixes #450.
  • Fixed issue where Cypress hanged due to Xvfb permissions. More intuitive output is given during install failures. Fixes #330.
  • The checks used to determine an element's actionability are now run synchronously. This solves some circumstances where the element could have moved or otherwise change between the checks. Fixes #570.
  • Fixed issue where clipped elements with overflow-y: hidden were falsely passing as "visible". Fixes #563.
  • When using .select() on a select with multiple options with the same value, we now properly set selectedIndex and selectedOptions on the select. Fixes #554.
  • Fixed issue where changing any spec file (renaming, adding, deleting) would remove the highlighted styling of the currently active spec file in the Test Runner. Fixes #547.
  • We now get the absolute paths of styles to use when displaying snapshots. This will fix situations where some stylesheets were improperly referenced during the snapshot, so did not display styles correctly. Fixes #525.
  • Fixed issue where commands would retry and potentially exceed their timeout values during page transitions. Fixes #594
  • Fixed issue where server routes were lost after page load if not initiated by a cy.visit() command. Fixes #177
  • Using mocha's done callback now works correctly. We've improved mocha's handling of uncaught exceptions and properly associate them to test failures.
  • cy.viewport() is now synchronized with the UI so that it does not resolve until the DOM has re-rendered using the dimensions.
  • "outer assertions" now are correctly retried by previous commands. Fixes #543.
  • The example_spec from the kitchen-sink will never accidentally be seeded when running cypress run on a brand new project.

Misc:

  • We now display a warning in the console when returning a promise from a test and also invoking a Promise or cy commands. Fixes #464.
  • Reduced the number of internal Cypress network requests in the "Network Panel" of Dev Tools. Fixes #606.
  • We've moved our entire codebase into one into a private "Monorepo". This is in anticipation for going open source (making the GitHub repo public) and should make it easier for everyone to contribute to our code. Fixes #256.
  • When element's are not visible due to being covered by another element, the error message now says what element is covering what element. #611
  • Improved the calculations to calculate an elements visibility. Additionally updated error messages to be clearer whenever an element isn't considered visible. Fixes #613
  • The "Can't start server" error displayed in the Desktop-GUI no longer prevents you from interacting in the Desktop App. It now displays as a warning. Fixes #407.
  • cy.focused() now automatically retries until the element exists in the DOM. This makes it behave the same as cy.get() Fixes #564 and #409.
  • We now support per-project state.json. Fixes #512.
  • We can now handle multiple projects per server. Fixes #512.
  • The Test Runner can now have projects added by being 'dragged' in. Fixes .
  • The Test Runner update window now has messaging about package.json versioning. Fixes #513.
  • The Test Runner now accounts for cypress being installed per project as npm module. Fixes #500 and #514.
  • cypress install -d option. Fixes #389.
  • Exposing Cypress Binary should no longer be necessary when cypress is locally installed. Fixes #379.
  • Added an 'App Data' option in the Desktop App that displays app data. Fixes #475.
  • When cy.spy() or cy.stub() are never called, the error now displays a clearer, grammatically correct error. Fixes #520.
  • Detection of installed browsers has been improved. Fixes #511.
  • When commands are clicked on and logged into the console from the Command Log, they now display their 'yield' instead of 'return', since they really yield instead of return. #612
  • The build process of the driver has been modernized. Fixes #429.
  • XHR's from your application are no longer forcefully aborted between tests.
  • Better error handling when running commands outside of a test.
  • URL changes from navigation events or hashchanges now display more accurately.
  • cy.go() now snapshots before and after the navigation event.
  • Page load events no longer forcibly null out the current subject. This was very unexpected and difficult to debug. Now stale elements or other objects from previous pages are yielded to you.
  • Using an array of the same alias in a cy.wait() now yields you those XHR's in the order they were requested. Previously it was based on when the responses were returned.
  • Returning null from a .then() will now change the subject to that. Previously returning null would not cause subject changes.
  • We now no longer remove spies, stubs, or routes at the end of the very last test. This enables you to continue to manually use your app and have Cypress continue to instrument it.
  • Updated a few things to more aggressively cause GC.
  • Onboarding dialogs will never show up again once they are dismissed. Fixes #522.
  • window.alert() and window.confirm() now generate a page event in the Command Log (including the message).
  • cy.spy() and cy.stub() now have a .log(bool) method to disable their calls from generating a Command Log. Useful when your spies or stubs are called an excessive number of times.
  • Improved command subject validation error messages.
  • Improved the element detachment error messages (when you try to interact with an element that's become stale / detached from the document).
  • We finally have partial iframe support. You can at least now cy.wrap() iframe elements and interact with them using Cypress commands. More work needs to be done to "switch into" and back "out of" iframes. But we're getting there.
  • Scaffolding new projects no longer generates a default.js file.
  • Scaffolded index.js and commands.js have had their content updated to point to the custom commands API.
  • You can now call .focus() and .blur() on cy.window().
  • The CYPRESS_DEBUG env option has been removed in favor of the debug module and DEBUG=cypress:* usage.
  • Attempting to run cypress run on a project without a cypress.json now errors instead of scaffolding and running the kitchen sink.

Documentation Changes:

Note: we are still updating all of the docs to reflect all the 0.20.0 changes.

0.19.4

Released 06/18/2017

Bugfixes:

Fixed .type() not firing input event for React on versions 15.6.x. Fixes #536.

0.19.3

Released 06/14/2017

Bugfixes:

  • Server's that send Content-Encoding: br no longer cause Cypress to fail due to incorrect decoding. Cypress now strips encodings it cannot accept. Fixes #535.

0.19.2

Released 04/16/2017

Features:

  • You can now run your tests in the Electron browser that comes built with Cypress. You will see it as an option in the browser dropdown. This is the same browser that Cypress uses when running cypress run. This is useful for debugging issues that only occur during headless runs. Addresses #452.
  • New traversal commands .nextAll(), .nextUntil(), .parentsUntil(), .prevAll(), and .prevUntil() have been added. Addresses #432.

Bugfixes:

  • An error is now thrown if an undefined value is mistakenly passed into cy.wait(). Previously, it would set the command timeout to an unimaginably large number of ms. Fixes #332
  • Fixed issue where the contents of state.json were emptied, which would cause a crash and loss of state information. Fixes #473 and #474.
  • We no longer write the chrome extension within node_modules, and instead write this to the proper OS specific appData folder. Fixes #245 and #290.

Misc:

  • Error handling for invalid arguments passed to cy.wait() have been improved and will now suggest valid arguments that are acceptable.
  • Browsers in the browser dropdown now have colored icons, which help visually distinguish the variants of Chrome.
  • Increased timeout for browser to make a connection when running during cypress run from 10 seconds to 30 seconds.
  • Internally refactored how browsers are added and spawned in preparation of us adding cross browser support.
  • Switching specs in the GUI now closes the browser and respawns it and refocuses it.

0.19.1

Released 03/09/2017

Features:

  • Added Cypress.version property. Fixes #404.
  • Selecting <option> inside <optgroup> now works with .select(). Fixes #367.

Bugfixes:

  • EMFILE errors have been fixed. These were being caused due to ulimit being too low on your OS. This should fix the file watching problems people were having. Essentially we just replaced fs with graceful-fs and crossed our fingers this works. (It did on our machines). Fixes #369.
  • Now you can select the error text in the GUI. Fixes #344.
  • Cypress now correctly re-bundles files even when watchForFileChanges is set to false. Fixes #446 and #347.
  • Fixed file watching when changing the integrationFolder to something other than the default value. Fixes #438.
  • .select() now works on options that have the same value. Fixes #441.
  • Cypress no longer crashes when you click links in the on-boarding screen called "To help you get started...". Fixes #227.
  • The example_spec.js file that gets seeded on a new project no longer fails on cy.readFile(). Fixes #414.

Misc:

  • We now preserve the Test Runner's position and sizing after it's closed + reopened. Fixes #443.
  • We now ignore watching node_modules, bower_components and a few other folders to reduce the number of watched files. Fixes #437.

0.19.0

Released 02/11/2017

Notes:

  • We have updated all of the docs related to these changes. The CI Docs got a much needed facelift.
  • There is a new docs section related to the Dashboard and the new features.

Overview:

  • We have officially released our Dashboard which is our service that will display recorded runs.
  • This service has now been fully integrated into the Desktop Application. There is a new on-boarding process that helps you setup projects for recording.

Breaking Changes:

  • We have done our very best to create as little breaking changes as possible.
  • You will need to download a new cypress-cli - version 0.13.1.
  • Older CLI versions will continue to work on 0.19.0 except for the cypress open command - and will we print a warning to nudge you to upgrade.
  • Newer CLI versions will not work on versions of Cypress < 0.19.0 (but we don't know why this would ever even happen).

Features:

  • There is a new Dashboard service that displays your recorded runs.
  • The Dashboard enables you to view your recorded runs, manage projects, create organizations, invite users and set permissions.
  • Projects are either public with their runs being publicly viewable by anyone, or private which restricts their access to only users you've invited. All existing projects were set to private by default.
  • When you invite users (from the Dashboard) we will automatically allow them. This means you can invite all of your teammates (or anyone else). They can start using Cypress without talking to us.
  • We now list all of the recorded runs directly in the Test Runner under a new Runs tab. Fixes #236.
  • Your list of projects in the Test Runner now displays their last recorded run status - passing, failing, pending, running, etc.
  • We've changed the "Config" tab to now be called "Settings". We added two new sections to the "Settings" tab which displays your projectId and your Record Key. These sections do a much better job explaining what these are and how you use them.
  • You no longer have to use cypress get:key to get your Record Key. We now display this in your "Settings" tab and also in the Dashboard.
  • Projects will no longer automatically acquire a projectId when being added. There is now a very explicit opt-in process where you setup your project to record. This should make it much clearer what's going on behind the scenes.
  • cypress run now behaves likes cypress ci previously did and downloads + installs Cypress if it's not already installed.
  • cypress ci now works in OSX, and also works in Linux in Desktop flavors (like Ubuntu).

Misc:

  • cypress run will now download and install Cypress if it is not already installed.
  • We renamed CYPRESS_CI_KEY TO CYPRESS_RECORD_KEY. This makes it clearer what this key actually does - and the fact that it can be run anywhere irrespective of CI. We still look for the old named key but will print a warning if we detect it.
  • We print a warning when using an older CLI tool version. Fixes #424.
  • We've improved many of the error messages related to recording runs. Fixes #423.
  • cypress ci has been deprecated. You now use cypress run --record --key <record_key>. The key you used to pass to cypress ci is the same key. We've consolidated these commands into just cypress run which makes it simpler and clearer. Their only difference is that passing --record to cypress run will record the build to our Dashboard. Fixes #417.

0.18.8

Released 02/05/2017

Overview:

  • We have officially implemented our Sinon.JS integration: adding cy.stub(), cy.spy(), cy.clock(), and cy.tick(). We've matched Sinon's APIs and added sinon-as-promised and chai-sinon. In addition we've fixed Sinon performance issues, and improved the display of assertion passes and failures.
  • These new APIs will work well in both unit tests and integration tests.

Features:

  • You can now use cy.stub() and cy.spy() synchronously. These both match the Sinon API identically. We will display stub/spy calls in the Command Log and provide the call count, arguments, context, and return values when you click on the log. Stubs are automatically reset between tests. Fixes #377.
  • We've added our own special aliasing flavor to cy.stub() and cy.spy(). You can use the .as() command and we will associate spy and stub invocations (the same way we do with XHR aliasing and route matching).
  • We've added cy.clock() and cy.tick() which are both asynchronous methods to modify timers in your application under test. We automatically apply clock (even if you invoke it before your first cy.visit()) and will automatically reapply it after page load. cy.tick() will enable you to control the amount of time you want passed in your application. This is great for controlling throttled or debounced functions.
  • sinon-as-promised is automatically applied under the hood which extends Sinon and provides the .resolves(...) and .rejects(...) APIs which makes it easy to stub promise returning functions.
  • We support and display multiple sub spies when using Sinon's .withArgs(...) function.

Misc:

  • We've enhanced chai-sinon by improving the output during passes or failures. Fixes #31.
  • We've ripped out Sinon's argument serialization in favor of our own.
  • We no longer send Sinon to the remote application under test. In other words, you'll no longer see sinon.js being sent as a network request.
  • Deprecated the undocumented cy.agents function, but it will continue to work and will be officially removed later.

0.18.7

Released 01/30/2017

Bugfixes:

  • Fixed regression in 0.18.6 that caused Cypress to fail when switching spec files when baseUrl was set in cypress.json. Fixes #403.

0.18.6

Released 01/29/2017

Features:

  • We now launch Cypress tests directly to the baseUrl to avoid an initial page refresh when encountering the first cy.visit() command. This should help tests run faster. Fixes #382.

Bugfixes:

  • Uninstalling the last used browser no longer causes the Test Runner to error and hang. Fixes #371.
  • Fixed issue where stdout would not be displayed on a completed cypress ci run. Fixes #398.
  • Fixed a longstanding issue in Cypress where logging in from another computer would kill the session on all other computers, and prevent you from accessing cypress get:key (amongst other things). Fixes #400.

Misc:

  • We now validate all of the configuration options set in cypress.json to ensure it has valid types. Fixes #399.
  • We now validate that baseUrl is accessible prior to running tests. This prevents a common situation where you may forget to boot your web server and have instantly failing tests. Fixes #383.
  • We now show the entire scaffolded tree of files when adding a brand new project. Fixes #401.
  • We display errors coming from babel with more helpful information now.
  • Changed the Test Runner to use JWT for authorization. You will have to log in again.

0.18.5

Released 01/08/2017

Features:

  • You can now disable videoCompression by passing false in cypress.json or env variables. In very long runs and on CPU throttled instances compression can take a considerable amount of time, possibly as much as 50% of the time spent running actual tests. Fixes #372.

Misc:

  • Improved performance when running cypress run by caching the last bundled spec. This prevents having the same spec file rebundled each time cy.visit() caused a full page navigation. You should see a moderate improvement in test run time. Fixes #370.
  • We are now capturing stdout and several other properties for use + display in our Dashboard on cypress ci runs.
  • Enable cy.fixture() to send an encoding for images other than forcing the default encoding of base64. Fixes #373.
  • Enable cy.route() to pass an encoding parameter when using fx:fixture syntax. Fixes #374.

0.18.4

Released 12/28/2016

Bugfixes:

  • Prevent cy.url() from accessing the URL during transition phase and throwing an error. Fixes #356.
  • Stubbed functions now serialize correctly when switching domains on a cy.visit(). Fixes #354.
  • Fixed a handful of scenarios and edge cases where cookies were not properly synchronized between external requests and the browser. This led to situations where cookies were either duplicated on requests, or were not sent. Fixes #357 and #361 and #362.

Misc:

  • cy.request() now favors baseUrl config over remote origin when you do not pass a fully qualified URL. Fixes #360.

0.18.3

Released 12/18/2016

Features:

  • There is now a cy.log() command for displaying an arbitrary message and args. Useful for providing context while testing and debugging long tests. Fixes #342.

Bugfixes:

  • cy.title() now uses the document.title property as opposed to querying for <title> elements in the <head>. Fixes #351 and #331.
  • We now exit correctly (with status of 1) in the case of headless renderer crashes. Additionally we capture these errors properly, explain what happened, and link to external error document to suggest fixes. Fixes #270 and #348.

Misc:

  • Improved headless performance, and added optimizations for early and often GC.

0.18.2

Released 12/15/2016

Bugfixes:

  • Under the hood cy.visit() now sets an Accept: text/html,*/* request header to prevent some web servers from sending back 404 in the case where they required this header. Only a small % of servers would ever do this, but webpack-dev-server was one of them. Fixes #309.
  • cy.request() now sends an Accept: */* request header by default too. Fixes #338.

Misc:

  • cy.request() now includes more debugging information (related to headers) in the error output. Fixes #341.
  • When cy.request() times out, we now output much better error messages including information about the request sent. Fixes #340.

0.18.1

Released 12/11/2016

Notes:

Features:

  • cy.request() can now have its automatic redirect following turned off by passing {followRedirect: false}. Fixes #308.
  • cy.request() now has a qs option that automatically appends query params to the url property. Fixes #321.
  • cy.request() now follows redirects exactly like a real browser. Previously if you POSTed to an endpoint and it redirected to a GET then cy.request() would not follow it due to the method changing. It now follows method changing redirects by default. Fixes #322.
  • cy.request() now accepts the form option which will convert the body values to urlencoded content and automatically set the x-www-form-urlencoded header. This means you can now use cy.request() to bypass your UI and login with standard form values. Fixes #319.
  • When cy.request() fails, it now outputs the full request / response information. This behaves more similar to cy.visit() failures. Fixes #324.
  • cy.request() now prints all of the underlying HTTP request / response information into the Dev Tools' console (when clicking on the Command Log). This means that you will see everything you would normally see from the Network tab as if the request were made from the browser. We even print redirect information. Fixes #325.

Bugfixes:

  • Cypress' internal babel will no longer attempt to load your project's .babelrc. This helps avoid potential version conflicts. Fixes #312.
  • We no longer watch the supportFile while running cypress run. Fixes #329.
  • watchForFileChanges is now correctly respected in regards to watching all files, including the supportFile. Fixes #336.
  • There is no longer an error when scaffolding a new Cypress project. Fixes #326.
  • The Runner UI no longer appears to be "running" when there is a spec bundle error in the supportFile.
  • Cypress now correctly exits during cypress run in linux when the browser fails to connect. Fixes #333.
  • Cypress now correctly exits during cypress run in linux when there is a spec bundle error. Fixes #337.
  • Cypress now retries up to 3 times for the browser to connect during cypress run. The warning / error messages were also updated to be clearer. Partially addresses #334.

Misc:

  • Deprecated failOnStatus property for cy.request() and renamed to failOnStatusCode. Fixes #323.
  • Removed the cookies option from cy.request() because cookies are now always get/set on requests. This option really never made any sense to have. Fixes #320.
  • Better data reporting when recording builds in CI.
  • We now collect "global" errors that may prevent any tests from running. We will be displaying these in our future CI platform.

0.18.0

Released 11/27/2016

Notes:

  • We've created a new example recipes repo to show you common testing scenarios including how to use the new module support.

Summary:

  • We've added automatic ES2015+, module, JSX, and CJSX support to all test files. This means you can use require, import, or export declarations to load other files. You can also use this to import your own application specific JavaScript modules and write unit tests for them. More of these details are yet to come. See this issue.
  • You can now use your regularly installed node_modules in your project to do things like utilizing lodash for utility functions or extending chai with assertion plugins.
  • Because we're now processing the spec files prior to handing them off to the browser, this means we will display problems like syntax errors when something in the processing goes wrong. Additionally, we print these out during cypress run, so you're not stuck wondering what went wrong.

Breaking Changes:

  • Previously, we auto-magically included all files within cypress/support. This has now gone away and we've simplified this to automatically including a single cypress/support/index.js file. That single file acts as the entry point meaning you should import or require the other support files you'd like to include. Although this is still "automatic" it's much less magical and we'll be updating all of our docs to reflect this. The purpose of cypress/support hasn't really changed, just the implementation of it has. We will automatically seed a cypress/support/index.js file for you (even on existing projects). The file location of cypress/support/index.js can be changed with the new supportFile option in your cypress.json. This feature can also be turned off by specifying supportFile: false.

Features:

  • We now support ES2015+, modules, and JSX in all spec files. Fixes #246.
  • Spec files may now be written as .js, .jsx, .coffee, or cjsx files.
  • Test files with JS syntax errors are now handled and we provide a GUI that points to the exact line/column number. Additionally we print these out during cypress run and exit the process with code 1. Fixes #293.

Misc:

  • We improved the logic around when and if we scaffold files on a new project. We're much smarter about this and not generating these forcibly every time. Fixes #285.
  • Simplified handling of support files and made them less "magical". Fixes #286.
  • Renamed supportFolder to supportFile in cypress.json. We will automatically rename your cypress.json if this property was present on update.

0.17.12

Released 11/21/2016

Bugfixes:

  • You no longer have to log in again after updating. Fixes #305.
  • Updating in app now works again. Sorry about that. Fixes #304.
  • Headless frame rate is now correctly set to 20 instead of resetting back to 60. Fixes #303.
  • We now automatically drop frames that the CPU cannot keep up with while video recording during cypress run. Previously we would buffer all frames in memory and it was possible to exhaust all memory due to the way that streaming backpressure works. Fixes #302.
  • Fixed an edge case in the driver that could lead to memory leaks. This happened when Command Logs updated from previously run tests. Normally, in headless mode, we automatically remove references to purge memory after each test, but when logs were updated after this, their references were merged back in again and held onto forever. If you were seeing long Cypress runs die or eventually halt, this was likely the cause. We did extensive memory regression analysis on Cypress and could not find any more memory leaks. Fixes #301.

Misc:

  • Improved cypress run and cypress ci headless output. Fixes #306.
  • Improved performance by preventing snapshots from being taken during headless runs.

0.17.11

Released 11/16/2016

Roadmap:

  • The changes in version 0.17.11 below are in preparation for Cypress ¬タル platform service: a portal where screenshots, videos, config, and logs of your builds are accessible.

Overview:

  • cypress ci now uploads build assets to our servers after a test run completes. Additionally, it tracks the config settings used during the build and tracks each individual test failure.
  • If you do not want these assets to be tracked by Cypress, you need to switch to using cypress run. We will happily remove any build assets that are accidentally uploaded to us during the update transition.

Features:

  • We now record videos during a headless run with both cypress ci and cypress run. Fixes #229.
  • After completing cypress ci, we now upload build assets (such as screenshots and videos) to be used in our upcoming admin interface. This will enable you to review assets without having to touch your CI server. Fixes #292.

Misc:

  • We've redesigned the headless run stdout to give you more details of the run, the stats after the run, what screenshots were taken, the video that was recorded, compression settings for the video, uploading asset progress, etc.
  • Screenshot names now include their parent titles, and invalid file system characters are scrubbed. Fixes #297.
  • We no longer artificially restrict the environment cypress ci can run in. It can now run anywhere. Fixes #296.
  • We removed scaffolding any directories on a new project (during cypress run). Fixes #295.
  • cypress run no longer prompts the user for any kind of interaction, thus enabling you to use this in CI if you choose to do so. Fixes #294.
  • There is a new configuration property called: trashAssetsBeforeHeadlessRuns (This was changed to trashAssetsBeforeRuns in 3.0.0) that is set to true by default and will automatically clear out screenshots + videos folders before each run. These files are not deleted, they are just moved to your trash.
  • There are several new configuration properties for video recording: videoRecording, videoCompression, and videosFolder.

0.17.10

Released 11/07/2016

Bugfixes:

  • Fixed switching between two different spec files from the desktop app causing document.domain to be wrong. Fixes #276.
  • Fixed inserting the string null into cy.request() urls when providing a baseUrl in cypress.json while origin could not be determined. Fixes #274.
  • Fixed incorrect error message on reverse visibility assertions. Fixes #275.

Misc:

  • We've improved the way we inject content into <html> responses by filtering the underlying HTTP request headers. We no longer inject content into templates which were loaded via XHR. Fixes #257 and #288.

0.17.9

Released 10/22/2016

Bugfixes:

  • Cypress now applies cookies to the browser which were cleared between redirects. Fixes #224.
  • Snapshots now work even when <html> tag has invalid attributes. Fixes #271.
  • Cypress no longer crashes on initial cy.visit() when the 3rd party web server never ends the response. Fixes #272.

Misc:

  • Changed default responseTimeout from 20000 to 30000.
  • Changed default pageLoadTimeout from 30000 to 60000.
  • The internal Cypress proxy now forcibly responds to requests taking longer than responseTimeout. Currently this sends back text/html with the ETIMEDOUT error, but this likely needs to be configurable. The reason we are now forcibly applying timeouts is to prevent socket pooling exhaustion where tests are running and a 3rd party server never responds to the request.

0.17.8

Released 10/13/2016

Bugfixes:

  • Fixed opener of undefined errors due to page load events causing snapshots prior to the load event of the remote application. Thanks to everyone who helped pitched in on this one! Fixes #258.
  • Cypress now correctly sets cookies with expirationDate in the past. Chrome did not handle these cookies as documented and our code did not take this into account. We also added a lot more e2e tests around this behavior. Fixes #266.
  • We are now taking additional precautions to prevent Cypress from trashing the wrong folder during an upgrade (with an open project). This was actually fixed in 0.17.7 but the problem was is that during an update, the new version (which was fixed) was still being passed the wrong arguments from the older (broken) application. We've now upgraded 0.17.8 to detect this, and just use the expected default install location of Cypress. If you're concerned, just close your currently open project before updating. Fixes #265.

Misc:

  • When an in app update fails in linux we now provide instructions on how to manually update Cypress.
  • We now properly take the maxAge cookie flag into account and give it preference over the expires flag as per the cookie spec.

0.17.7

Released 10/12/2016

Features:

  • There is now a new chromeWebSecurity option you can set in cypress.json to turn off Chrome's Web Security features. We've written a brand new reference that details why and how you could use this. Cypress Web Security. This option can be used for accessing cross origin <iframes> or if your application needs to test navigation across super domains. Fixes #262.

Bugfixes:

  • We now capture cross origin errors correctly instead of these showing as Uncaught DOMExceptions in the console. Fixes #261.
  • We no longer trash the wrong folder on OSX in-app updates (when a project is open). Sorry about this! Fixes #260.
  • cy.visit() urls with domain-like segments (which weren't actually the domain) no longer cause Cypress to think you're trying to navigate to a different superdomain. Fixes #255.

0.17.6

Released 10/04/2016

Features:

  • Snapshots will now be pinned when clicking on a command in the Command Log. This enables you to inspect the state of the DOM when the snapshot was taken. We've given you a new series of controls for turning off the element highlighting and hitboxes. Additionally we've given you the ability to manually click through each named snapshot when there are multiple states (like before and after). Fixes #247.

Bugfixes:

  • Fixed a regression where tests that failed outside of a hook would incorrectly indicate themselves as a before each hook. In addition, in the default spec, reporter will now display the test name when a hook was the source of failure. Fixes #253.
  • Fixed a deployment bug in the core-desktop-gui.
  • We now prevent cy.visit() from accidentally snapshotting twice.

Misc:

0.17.5

Released 10/02/2016

Features:

  • We've added JUnit as a valid built-in reporters. Fixes #178.
  • You can now add or write your own custom reporters. This means you can npm install xyz-mocha-reporter and we'll automatically correctly require that package. Alternatively you can write your own xyz-custom_reporter.js file. Fixes #231.
  • The reporter can now be resized. We persist this state locally so it should "stick" between browser launches / app restarts. Fixes #204.
  • Cypress now "remembers" the last browser you had open and will suggest opening that whenever a project is opened. Addresses #193.
  • Instead of seeing Script error. - cross origins script errors are now handled specially and we throw a very long and exciting error explaining what just happened. Fixes #241.
  • When uncaught errors are thrown in hooks we now indicate Mocha's behavior as part of the error - that it is skipping the remaining tests in the current suite. Fixes #240.

Bugfixes:

  • The reporter now more intelligently scrolls to prevent commands from being cut off. Useful in screenshots / video recording. Fixes #228.
  • We've improved the logic of how snapshots are restored so that it does not break the CSS when there were full page navigations in the test and the CSS changed. Fixes #223.
  • Iframes are now correctly handled when we restore snapshots. Previously, we removed iframes which would change the page layout and the hitboxes' coordinates we drew were wrong. Now we insert iframe placeholders that prevent the page layout from changing. Fixes #234.
  • Snapshot hitboxes no longer incorrectly draw for elements that are hidden. Fixes #251.
  • Fixed a bug that caused commands to time out on subsequent tests whenever there was an uncaught error + an assertion conflict. Fixes #238.
  • Fixed an edge case where assertions would incorrectly associate to a previously run assertion. Fixes #252.
  • Cypress commands now correctly execute in after and afterEach hooks on a failed test. Previously they would only run on passing tests. Fixes #203.

Misc:

  • We've bypassed Mocha's default uncaught error handling and replaced it with something much better - actually using the thrown error instances instead of creating a new arbitrary one. This means you'll see better stack traces on uncaught errors. Fixes #193.
  • We've bypassed Mocha's default uncaught error handling in a hook. Normally this immediately ends the run. Instead we are skipping the remaining tests in the current suite. This prevents skipping potentially dozens or hundreds of tests downstream that are typically unrelated to the hook failure.
  • We've updated cypress-cli package to 0.12.0. You will need to download this new CLI version if you want to pass --reporter-options.
  • Bumped the internal version of mocha from 2.2.1 to 2.4.5.

0.17.4

Released 09/12/2016

Breaking Changes:

  • Using subsequent cy.visit()'s in the same test will not necessarily force a full page refresh. If all that changed was the hash of a url, then the hash changes will take affect without a full page refresh. This matches the behavior of a real browser. Previously cy.visit() always forced a full page refresh and this was not correct.

Features:

  • Using cy.visit() now acts exactly how modifying the URL in a real browser works. This means that if you visit a url with a hash in it, instead of forcing a full page refresh, it will now modify the hash route as if you had manually changed it. This more accurately reflects real user behavior. Previously this was impossible to do with Cypress other than manually altering window.location.hash.

Bugfixes:

  • Fixed a regression in 0.17.2 which caused separate tests that were visiting the same URL not to actually visit the new URL and eventually time out. We've updated some of our internal QA processes around this because we rarely have regressions and they are a pretty big deal. Fixes #225.
  • Fixed displaying (null) contentType when a cy.visit() returned a 404 status code. We now only display contentType when one exists.

0.17.3

Released 09/11/2016

Features:

  • When visible assertions such as should('be.visible') fail we now print the reason Cypress thought the element was invisible. Matches what Cypress prints out when attempting to interact with invisible elements. Fixes #221.

Bugfixes:

  • Prevent Host header from having its port appended when request was for port 80 or 443 which lead to 3rd party reverse proxy problems such as with zeit.co hosting. Fixes #222.
  • Send valid http response errors, and display new lines correctly. Fixes #218.
  • Correctly inject on 5xx http response codes. Fixes #217.
  • Correctly inject on 4xx and other bad http response codes when using Cypress as the file server. Fixes #219.
  • Correctly inject on gzip errors from 3rd party servers doing unintended things. Fixes #220.

0.17.2

Released 09/06/2016

Notes:

  • After this update if you are seeing <iframe> origin errors please let us know by opening an issue. We will screen-share with you to diagnose the issue. We're no longer aware of any situation where this should happen, so if you're experiencing these bugs, please help us track them down.

Features:

  • Attempting to cy.visit() a non text/html resource will now throw a specific error message instead of bombing on page injection with an <iframe> origin error. You have to visit actual html, you cannot visit something like a .json or .png. If you're wanting to visit an API route on your back end that does something like set cookies (thus avoiding loading your UI) you can just use cy.request() for this since it will now automatically get and set cookies under the hood. Fixes #211.

Bugfixes:

  • Fixed a regression in 0.17.1 that was incorrectly setting Cache headers. This could cause a situation where you received an <iframe> origin error. Additionally we now set No-Cache headers whenever we inject content, but otherwise respect the headers coming from web servers. When using Cypress as the file server, we set etags but prevent caching.
  • Most likely fixed a bug that was crashing Cypress due to Cannot set headers after they've been sent. We were unable to write a test for this since we could not recreate the error, but analyzed how it may happen and fixed the code there. open an issue if you see this error, it will be obvious since Cypress will literally crash.
  • We stopped minifying vendor.js (for real this time). More optimizations to come around this.
  • Prevented accidentally setting domain cookies when they were really hostOnly cookies, thus duplicating the number of cookies sent on requests. Kudos to @bahmutov for finding this one. Fixes #207.
  • Fixed some edge cases in cypress-core-extension where it threw errors when attempting to executeScript on a tab with about:blank or chrome:// urls.
  • We've fixed some underlying issues with cy.go() during cypress run. It always worked fine in real Chrome. Previously there were some situations where it would not navigate forward / back correctly.

Misc:

0.17.1

Released 08/31/2016

Features:

  • You can now pass keyboard modifiers such as ctrl, cmd, shift, and alt to .type(). In addition we've added support for not "releasing" these keys so they can affect other actions such as .click(). Addresses #196.
  • You can now type into the <body> or document as opposed to previously having to target a valid focusable element. This is useful in situations where you're testing keyboard shortcuts and do not want to target a specific element. Addresses #150.
  • There is a new command cy.readFile() that reads files on your file system and changes the subject to the contents. Addresses #179.
  • There is a new command cy.writeFile() that creates and/or writes contents to files on your file system. Addresses #179.

Bugfixes:

  • defaultCommandTimeout now works correctly. The driver was still referencing the old commandTimeout value.
  • The __cypress.initial cookie should now be removed during any cy.visit(), which should fix some edge cases with the proxy accidentally injecting content when it shouldn't. We also added a ton more e2e tests covering these edge cases and other behavior.
  • The proxy now restricts its injection to only Content-Type: text/html headers so it will not accidentally inject into the wrong responses.

Misc:

  • All cy.fixture() extensions are now supported and Cypress will no longer throw on extensions it doesn't recognize. For known fixture extensions we'll continue to apply a default encoding and for everything else it will default to utf8. Fixes #200.
  • cy.fixture() now accepts encoding as a 2nd optional argument.
  • We now display a keyboard 'modifiers' column when clicking on a .type() in the Command Log.

0.17.0

Released 08/30/2016

Overview:

  • The desktop application has been completely redesigned. We have moved from a tray application to a standard dock application. The list of projects is now in the same window as the list of tests in a project. As each test runs, the application highlights the currently running spec and displays the browser version running. The configuration of a project is now displayed in its own tab. There is now a Desktop Menu where you can logout, check for updates, or view help links.
  • The test runner has been rebuilt from the ground up in React.js. The left side of the runner called the reporter is now a separate application. This, as well as other changes, markedly improved the performance of running tests. Your tests will now run faster. This will also enable you to test your application in full screen. Additionally this paves the way for being able to spawn multiple browsers at once and synchronize testing across them. This also means we'll be able to support mobile browsers. The UI for doing this hasn't been implemented but the vast majority of the work to accomplish this is done now.
  • We have rewritten the entire proxy layer of the Cypress server to finally fix all the problems with CORS.

Breaking Changes:

  • You cannot cy.visit() two different super domains within a single test. Example: cy.visit('https://google.com').visit('https://apple.com'). There shouldn't be any reason you ever need to do this in a single test, if you do, you should make these two separate tests.

Features:

  • All CORS related issues should finally be fixed now. Cypress now internally switches to the domain that you used in your cy.visit(). This means that the correct domain will display in the URL based on the application currently under test. Your application's code will run under the current domain at all times. Previously we implemented an endless amount of hacks and internal translations to figure out the domain you were supposed to be on without actually being on the domain. This caused code to behave different and caused subtle issues. Those issues should now be resolved. The entire proxy layer has been rewritten to handle all HTTPS certificates flawlessly, continue to inject (even on HTTPS pages), and still know when to automatically bypass injection so you can open other tabs while testing in Cypress. These new proxy changes also unlock the ability to do things like allowing or blocking specific 3rd party domains, or even be able to stub not just XHR's but any kind of HTTP request.
  • window.fetch now works correctly. Stubbing these does not yet work but it is now possible for us to implement stubbing in a future version. Addresses #95.
  • The list of tests now automatically refresh when test files are renamed, deleted, or added. In addition, because the list of tests is now displayed in the desktop application, we now synchronize the state of the current running spec.
  • cy.visit() has better error messages. Cypress now programmatically determines why a cy.visit() failed and gives you a ridiculously accurate error message. Addresses #138.
  • cy.visit() now displays redirects and any cookies set.
  • The currently running test is now scrolled into view. This behavior can be turned off by scrolling in the Command Log or selecting to disable auto-scroll at the top of the Command Log. Addresses #194
  • Tests in the Command Log now automatically expand when specific commands take longer than 1000ms to run. Previously when running more than 1 test we did not expand commands until a test failed. Now they will be expanded and automatically collapsed whenever a single command is taking a long time to finish.
  • We now have full blown subdomain support. This means you can now navigate to a subdomain either directly via a cy.visit() or by navigating in your application naturally (such as clicking an <a>).
  • cy.request() now attaches and sets cookies transparently on the browser. Even though the browser will not physically make the request, we automatically apply outgoing cookies as if the browser had made the request. Additionally we will automatically set cookies on the browser based on the response. This means you can use cy.request() to bypass not just CORS but handle things like automatically logging in without having to manually perform these actions in the UI.
  • We now handle HTTP request errors much better. Previously if your web server sent us back a 4xx or 5xx response we would automatically send back a 500. Now we transparently pass these through.
  • Improved dozens of error messages.
  • .debug() output has been improved, and you can now easily inspect the current command's subject.
  • Clicking the URL in the header of the runner now opens that URL in a new tab.

Bugfixes:

  • Fixed URL proxy issue with subdomains. Fixes #183.
  • Viewport size maximum has been decreased from 3001px to 3000px and minimum has been increased from 199px to 200px to match error messages. Fixes #189
  • WebSockets are now correctly proxied through HTTPS and through subdomains different than the current domain under test.
  • Stopped .debug() from accidentally mutating subjects.
  • Cypress now correctly injects and handles pages which are missing a <head>, a <body>, or even an <html> tag. Previously it would bomb on pages missing these tags.
  • All commands with a long message (such as assertions) are automatically scaled down in font size and truncated properly. In addition, assertions will correctly bold the expected and actual values.

Misc:

  • cypress run no longer requires being logged in.
  • Renamed configuration option commandTimeout to defaultCommandTimeout. Cypress will transparently rewrite this if you have it in your cypress.json, so you don't have to do anything.
  • Renamed onConsole and onRender Command Log options to consoleProps and renderProps. We still support the older property names for backwards compatibility.
  • Added support for a command's message or renderProps.message to use markdown.
  • The default value of port within a project's global configuration has changed from 2020 to now being a random open port. You can still configure a specific port if needed within the configuration.
  • We have upgraded the Chromium that runs headlessly on cypress run to version 51.
  • The internal version of node which is built into Cypress is now 6.1.0.
  • Cypress .js files are no longer minified to make them easier to debug.
  • We are cleaning up internal __cypress cookies more so they won't get in the way of testing your application.
  • We now opt into gzip handling instead of forcing requests to omit it.
  • The runner is now responsive. It will correctly scale down URLs on smaller screen sizes instead of looking completely broken in CSS. We also designed a much better loading indicator.
  • Added button to the reporter that focuses the Test Runner and shows the list of tests.
  • The reporter now updates the duration every 100ms instead of only when a test changes.
  • In the reporter, suites that are pending or contain only pending tests have the blue "pending" indicator on the left instead of the white "processing" indicator.

0.16.5

Released 07/31/2016

Bugfixes:

  • Force exit codes that are null to 0. Fixes #184.

0.16.4

Released 06/17/2016

Bugfixes:

  • Fixed regression caused by 0.16.2 where a failed cy.contains() would not be canceled and would continue to run and display failed assertions in between test runs (without a full page refresh). Fixes #174.

0.16.3

Released 06/17/2016

Features:

  • cy.route() now accepts string glob patterns using minimatch under the hood. This means you can more easily route dynamic urls without using regex. Example: cy.route('POST', '/users/*/comments', {}).
  • Cypress.minimatch is now exposed so you can easily test globbing patterns.
  • .type() can now be used on non-input elements that have a tabindex attribute. Key events will fire but no text content will change and no input based events fire. Fixes #172.
  • There is now an ignoreTestFiles configuration option that accepts an array of glob patterns. This enables you to ignore extraneous spec files that may be created during a build process. The default pattern is *.hot-update.js which will ignore dynamically generated webpack hot module swapping files. Fixes #159.

Bugfixes:

  • Fixed a bug where Cypress could get into a weird state and continuously error due to the before:log event not being properly disposed. Fixes #173.
  • Fixed a bug where invalid UTF-8 characters were being set in XHR headers which caused XHR's to fail. We now properly encode and decode all values. Fixes #168.
  • Nested directories under cypress/support no longer cause a 500 when tests run. This was due to Cypress not ignoring directories and trying to serve them as regular files. Fixes #163.
  • Fixed situations where 3rd party libraries (such as New Relic were instrumenting XHR's identical to Cypress' implementation. This caused an infinite loop which would crash the browser. We've updated how we instrument XHR's to take this into account and deployed multiple fallbacks and strategies to prevent this kind of thing from happening in the future. Fixes #166.

Misc:

  • Cypress.Server.defaults() now accepts a urlMatchingOptions option for passing options to minimatch.
  • cypress run now exits with the number of test failures instead of always exiting with 0. This matches the same way cypress ci works. Fixes #167.
  • In the Cypress CLI tool package version 0.11.1, you can now pass the --spec option to cypress ci. This enables you to run a specific spec file as opposed to all tests. Fixes #161.

0.16.2

Released 06/11/2016

Features:

  • Added new cy.screenshot() command which can take screenshots on demand.
  • When running cypress run or in CI, Cypress will now automatically take a screenshot when a test fails. You can optionally turn this off by setting screenshotOnHeadlessFailure to false in your configuration.
  • Added new screenshotsFolder configuration option with default of cypress/screenshots.
  • When running in Circle CI, we automatically export screenshots as artifacts which makes them available directly in their web UI. If you're using Circle CI, you'll be able to see screenshots without doing anything. If you're using Travis CI, you'll need to upload artifacts to an s3 bucket. This is a small slice of what is coming to help diagnose and understand errors in CI. Also in 0.17.0 we will automatically scroll the tests and more intelligently and open / close test commands so you can visually see what happened. Currently you may not see the test command's failure in the Command Log due to the view not scrolling.
  • Added new .each() command which iterates serially on a collection yielding the iteratee, the index, and the collection. Addresses #156.
  • cy.route() can now accept a single function and/or you can pass a function to the response property. This allows you to lazily evaluate routing responses. Great for referencing fixtures. Addresses #152.
  • cy.contains() now accepts a regular expression. Addresses #158.
  • .type() now accepts {downarrow} and {uparrow}. We do not move the caret but do fire all the proper events. Addresses #157.

Bugfixes:

  • cy.exec() now outputs additional stderr and stdout information. It additionally will automatically source your $SHELL which makes GUI apps behave as if they've been launched from your terminal. Fixes #153 and #154.
  • .then() yielding nested subjects.
  • cy.contains() no longer returns the last element found when siblings both contain the same content. Fixes #158.
  • Cypress no longer errors when you return a raw DOM element. It now correctly wraps this as the new subject.

Misc:

  • cy.contains() now provides an even more specific error message when it was scoped to a particular DOM element and contained a selector. Fixes #160.
  • You will now see a very specific error message when we detect that you've mixed up async and sync code in a .then() callback function. An example would be queuing up a new cypress command but then synchronously returning a different value.

0.16.1

Released 05/22/2016

Features:

Bugfixes:

  • Copy / Paste now works when logging in on OSX. Fixes #145.
  • Grammar: 'Login -> Log in'. Fixes #146.
  • Cypress now uses the body instead of headers to send external requests. Fixes #148.
  • When .then() throws this no longer prevents the next test from issuing any commands. Fixes #149.

Misc:

0.16.0

Released 05/17/2016

Notes:

  • Updating through the Desktop App in Linux does not work. To update please run cypress install from the command line.
  • We are still updating the docs to reflect all of these changes.
  • All users must LOG IN AGAIN and re-add their projects. Sorry, we've changed the way we store local data.

Overview:

  • 0.16.0 marks a significant change for Cypress. Before this we only issued commands using regular JavaScript and coordinated these with the back end server which is running. As of 0.16.0 we are now tapping into the underlying browser automation libraries which enable us to exceed the limitations of the JavaScript sandbox. This means we have total control over the browser for more powerful automation tooling. The downside is that we have only implemented these APIs for Chrome, and therefore running on multiple browsers will no longer work. This is a temporary setback as we'll be adding driver support for all of the other browsers over a period of time. You can read more about our browser management here.

Breaking Changes:

  • Running tests in Cypress now requires either Chrome, Chromium, or Canary to be installed on your OS environment. We intend to expand support for more browsers in the future, but for now, only these 3 are supported.
  • Removed support for Cypress.Cookies.get, Cypress.Cookies.set and Cypress.Cookies.remove.
  • Changed return of cy.getCookies() to return an array of cookies, each with properties include name, value, etc.
  • Changed return of cy.clearCookies() to return null (previously was returning Cookie that was cleared).
  • Cypress.Cookies.debug() has been temporarily disabled and will be re-enabled later.
  • Browsers are spawned in a Cypress specific profile so that we can maintain a clean state apart of your regular browsing usage. You will notice that your extensions are no longer installed. This is on purpose. 3rd party extensions can often get in the way of Cypress and cause failures. However, developer specific extensions for Angular, Ember, and React do not cause any issues but you'll want to reinstall them. You only have to install them once and they will persist.
  • The whitelist callback function of Cypress.Cookies.defaults() now receives a cookie object instead of just the cookies name as a string.

Features:

  • When a project is initially run from the desktop app, you can now choose to run Cypress in a select number of browsers including: Chrome, Chromium, or Canary (depending on what's installed on your OS).
  • Browser sessions are spawned independently of your existing profiles and we've disabled things like password saving / prompting, JavaScript popup blocking, and other features which get in the way of testing. Read more here
  • We automatically spawn Chrome in a custom theme so you can visually distinguish the difference between browser sessions spawned with Cypress vs your normal sessions. We know this may feel a little jarring because you're used to running Cypress alongside your other tabs. You will now see 2 chrome icons in your dock and you'll need to switch between them. We know this is problematic and confusing and we're looking into changing the icon of the Chrome running Cypress so it's easier to tell the Chrome sessions apart.
  • Added new commands to handle getting, setting, and clearing cookies: cy.clearCookie(), cy.getCookie(), and cy.setCookie().
  • All the cy.cookie commands have been upgraded to take new options and can do much more powerful things outside of the JavaScript sandbox.
  • Upgraded the Chromium version running headlessly and in CI from 47 to 49.
  • There is a new cy.exec() command that can execute any arbitrary system command. Additionally there is a new execTimeout configuration option which is set to 60s by default. Fixes #126.
  • There is a new numTestsKeptInMemory configuration option that controls how many test's snapshots and command data is kept in memory while tests are running. Reducing this number will reduce the memory used in the browser while tests are running. Whatever this number is - is how many tests you can walk back in time when inspecting their snapshots and return values. Addresses #142.

Bugfixes:

  • Cypress taskbar icon now displays correctly in OS X dark theme. Fixes #132.
  • Fixed issue where server error's stack traces were being truncated in the Desktop app rendering them impossible to debug. Fixes #133.
  • woff Fonts are now properly served from a local file system when using Cypress' web server. Fixes #135.
  • When an element's center is not visible the error message now includes the stringified element in question, and not undefined.
  • Typing into an input[type=tel] now works. Fixes #141.
  • XHR's which have their onload handler replaced after XHR#send is called is now properly accounted for. Fixes #143.

Misc:

  • XHR requests for .svg files are no longer shown in the Command Log by default. Addresses #131.
  • Improved error when cy.request() fails. The request parameters are now included in the error. Addresses #134.
  • When running a project in the new Cypress browser environment, if a new tab is opened, a message now displays discouraging the use of multiple tabs while testing. Addresses #9.
  • When navigating directly to localhost:2020 outside of the new Cypress browser environment, a message now displays discouraging running tests outside of the new Cypress browser environment.
  • If, for whatever reason, Cypress cannot communicate with the automation servers, your testing session will immediately end and you'll have the ability to re-spawn the browser.
  • cy.fixture() now has a default timeout of responseTimeout which is 20s.
  • cy.fixture() can now properly time out and accepts an options argument that can override its default timeout.
  • Improved initial Desktop Application startup performance by about 1.5s.
  • We now correctly store local data in each operating system's correct Application Data area. This will be more resilient to upgrades in the future.
  • Running Cypress in a linux VM on VirtualBox no longer displays "black screens".
  • Our internal proxy no longer strips HttpOnly cookie flags.
  • Improved command errors and normalized many of them. Fixes #137.
  • JavaScript popup blocking is now disabled and will not interfere with running tests. Fixes #125.
  • We now capture synchronous errors from XHR onreadystatechange handlers.

0.15.4

Released 04/22/2016

Notes:

  • The docs have not yet been updated to reflect the changes to .its() and .invoke().

Breaking Changes:

  • You can no longer improperly use .its() and .invoke(). Using .invoke() on a non function property will result in an error that tells you how to write it properly using .its().

Features:

  • Our chat has now been directly integrated into Cypress's nav. Clicking on the chat icon will immediately display the current gitter chat log.
  • Added a new link to Options dropdown in Desktop app for "Chat" that goes to our chat.
  • .its() and .invoke() now support dot separated nested properties.
  • Using .its() on a function will now allow you to access its properties instead of automatically calling a function. Fixes #122.
  • Error messages and command messages for .its() and .invoke() have been improved.
  • Adding an attribute called data-cypress-ignore to an element will prevent the internal Cypress proxy from rewriting any of its content or attributes.

Bugfixes:

  • During cypress run, windows created with window.open will no longer physically display. They are now correctly headless. Fixes #123.
  • The auto generated example_spec.js no longer errors on cy.visit('app/index.html') since that file would likely not locally exist.

Misc:

  • Better error handling of unauthorized users attempting to login to Cypress with improved Login documentation.

0.15.3

Released 04/10/2016

Features:

  • Cypress will now display the resolved configuration values when you open a project. This tells you the source of all config values.
  • The latest version of the Cypress CLI now accepts passing arguments to cypress open. Example: cypress open --config waitForAnimations=false --env foo=bar,baz=quux. This enables you to set and override local cypress.json configuration and additionally set environment variables.
  • Environment Variables that match any configuration keys (such as pageLoadTimeout or watchForFileChanges) now override their values. So, if you export CYPRESS_WATCH_FOR_FILE_CHANGES=false it will turn off this configuration option. Also note that we'll automatically normalize environment keys so: CYPRESS_pageLoadTimeout=100000 and CYPRESS_PAGE_LOAD_TIMEOUT=100000 will both be correctly handled. We'll also coerce values into Boolean or Number correctly.
  • Cypress now correctly proxies WebSockets that are pointed at the local Cypress server (typically localhost:2020). Because most users use Socket.io, when Socket.io could not correctly connect over WebSockets it would fall back to XHR polling. You may notice many less XHR requests in your command log (which is the intended behavior).
  • The tray icon in OSX will now change colors. It will turn blue when you're running a Cypress project and red on any kind of failures such as syntax errors in cypress.json. It will turn back black when nothing is actively running.
  • The title of your project is now the title of the browser tab (so you can easily tell Cypress tabs from one another).
  • There is now a link to our chat in the navigation of the web app.

Bugfixes:

  • The -s or --spec option now works correctly. You now must pass a relative or absolute path to your spec file. This is much less confusing, allows you to easily autocomplete entries from bash, and will support unitFolder later when it's added. Assuming you want to run a spec file that is located in cypress/integration/foo_spec.js you would pass: cypress run --spec 'cypress/integration/foo_spec.js'. Previously you could just pass --spec foo_spec.js which now no longer works (and was broken anyway). Fixes #120.

Misc:

  • Open sourced another core repo: Cypress Core Test Runner which makes up the Cypress Desktop Application.
  • Improved the error message displayed to users on Windows attempting to download the Cypress Desktop app.

0.15.2

Released 04/03/2016

Features:

  • The error message when Cypress detects that a test has ended early (there are still commands left in the queue) now displays a list of these commands with a much improved explanation.
  • There is now a new configuration option: watchForFileChanges that, when set to false in the cypress.json, will prevent Cypress from attempting to watch for file changes and restart your tests.
  • You can now set the default reporter in cypress.json for use during cypress run or in CI.

Bugfixes:

  • The --reporter CLI option is now working again.
  • the teamcity reporter is now also working again.

Misc:

  • Updated favicon + logo mark

0.15.1

Released 04/01/2016

Features:

  • cy.go() and cy.reload() now accept a timeout option. Also, these commands would previously time out after the default commandTimeout of 4000ms, but now they will timeout after pageLoadTimeout of 30000ms.

Bugfixes:

  • When an integration test file is unable to run and the integrationFolder is not the default path, the UI error now properly prints the integration test file's path by stripping off integration in the path. Fixes #117.
  • Cypress.Dom.isHidden() will now throw error when it isn't passed a DOM element.

Misc:

  • Renamed configuration option visitTimeout to pageLoadTimeout. You don't need to change anything. If you were specifically setting visitTimeout in your cypress.json file it will be transparently rewritten pageLoadTimeout on the next server boot. This option was renamed because now multiple commands cy.visit(), cy.go(), and cy.reload() all depend on this timeout option.
  • The Cypress tray icon has been updated. It's much better now.

0.15.0

Released 03/28/2016

Overview:

  • As we get closer to a public release we've decided to focus on onboarding new users and new projects. We've made several breaking changes to help with this process.

Features:

  • There is now an example_spec.js file that is scaffolded on new projects. This allows new users to instantly see Cypress successfully running on an example project and will answer many questions on writing your first tests. This example_spec.js file contains every single Cypress command and has approximately 70 tests.
  • Added a welcome dialog for new projects that explains how Cypress scaffolds out its folder structure. This dialog will only display if Cypress detects that you haven't written any tests or changed the initial example_spec.js file. The welcome dialog will no longer display after you've changed or added any tests.
  • Added the ability to click on file/folder links from within the Cypress webapp that will spawn your OS file/folder finder and show you where the files are located in your project.
  • There is now a default cypress folder that contains your test files, a fixtures folder with an example fixture, and a support folder with example support files. Inside cypress there is an integration folder that will contain your integration tests.
  • You can now turn off supportFolder and fixturesFolder by passing false in cypress.json. This will automatically remove the folders the next time you open your project in Cypress. Fixes #102.
  • Restyled the tests list.

Breaking Changes:

  • Cypress no longer looks at your tests directory for test files. Now, by default, it looks in the cypress/integration directory.
  • We've removed the configuration option testFolder and renamed it to integrationFolder inside of the cypress.json.
  • We've renamed the cypress npm package to be cypress-cli. You'll see a giant deprecation warning until your scripts have been updated to reference cypress-cli.. You can also uninstall the cypress npm package.
  • Added new fileServerFolder configuration option that can mount a directory other than your project root when using Cypress as a web server.

Misc:

  • Using .hover() will provide a detailed error message with a link for working around hover constraints. Addresses #10
  • Internal routing errors in Cypress are now gracefully handled with x-cypress-error and x-cypress-stack set on response headers.
  • Updated all of the repo names to be modular.

What you need to do:

  • We did not write an automatic migration from tests -> cypress
  • You need to manually move your existing test files from tests into cypress/integration.
  • Come into the chat if you have any problems or need help.

More Info:

  • Why did you change the default test folder to be cypress/integration.
  • We are adding support for unit testing in the near future and decided that there needs to be a separation between unit and integration tests. The actual runner will handle these two sets of specs very differently. It's important to make the change now so when we do add support for unit tests, you only have to create a unit folder inside of your cypress folder.

0.14.3

Released 03/20/2016

Features:

  • Added cy.getCookies() command for easy chain-ability. Fixes #103.
  • Cypress now outputs its version when passed the --version argument
  • If you are not logged in on OSX, Cypress now issues a native system notification indicating to you that Cypress is running in your tray (many users often complained they could not tell Cypress was actually running)

Bugfixes:

  • Handle clearing cookies better when they are created on a path other than /. Fixes #104.
  • Issuing Cypress Commands inside of a Promise now works. Fixes #111.
  • 'Add Project' dialog is no longer lost on blur. Fixes #115.
  • Desktop windows that are transparent no longer lose their box shadow.

Misc:

  • cy.visit() callback functions: onBeforeLoad and onLoad are now invoked with the current runnables context instead of with cy. This makes accessing properties in your tests much easier.

0.14.2

Released 03/14/2016

Bugfixes:

  • Chaining more cy commands after using cy.wrap() now works. Fixes #114.
  • Cypress now handles events property when a DOM element is removed during a .click() event. As per the spec, if mousedown causes element removal then mouseup and click and focus events will not be fired. Additionally if removal happens during mouseup then click event will not be fired. Also updated the onConsole groups to only display and indicate the events which actually fired. Fixes #109.

Misc:

  • Removed fa-refresh icons next to suites and tests until this behavior has been reimplemented due to ID removal.
  • Removed resetting the runnable timeout when a page load event resolves. This prevents an edge case where the next test may show as timed out during cypress run.

0.14.1

Released 03/13/2016

Features:

  • Project ID's and cypress.json are now only generated once you start your Cypress server. Previously they were created initially when you choose the project folder. This now means you won't have to cleanup excess files if you accidentally select the wrong folder. Additionally you can now use Cypress 100% offline. Previously the GUI would block until the project had an ID but this restriction has been lifted.

Bugfixes:

  • The proxy server can now correctly proxy content on a ipv6 host only. We had to patch node core to get this in, as by default node prefers ipv4. We now concurrently test all hosts via dns.lookup to find the first one that responds. This updated behavior now matches how other clients, like curl, and browsers resolve hosts. Fixes #112.
  • Simplified how Cypress stores projects and fixed some edge cases where Cypress would send an outdated Project ID.
  • Prevent server from opening and immediately closing + re-opening when project is missing a Project ID and one is generated.
  • Using Cypress as a file server and serving a file that's part of a folder that has a name containing a space now works. Fixes #113.
  • The existing .cy cache and settings are now correctly copied again after an app update.

Misc:

  • Projects without an ID now error correctly when running in CI.
  • When Cypress cannot proxy http content due to a software error it will attach a x-cypress-error and x-cypress-stack to the HTTP request for easy inspection and debugging.
  • Cypress will now output its internal logger directly to the console when CYPRESS_DEBUG env var is set.
  • Replaced Ruby / Compass with node saas.

0.14.0

Released 03/08/2016

Summary:

  • This update represents mostly a lot of internal structure changes. We swapped out the underlying Desktop architecture and refactored all of the back end code to prepare for an open source release.
  • If you choose to install Cypress from the CLI Tool you must update to the latest version 0.9.1. Just run npm install -g cypress and then you can run cypress install. You don't need to do anything if you update from within the Test Runner itself.

Features:

  • The Desktop App has been re-skinned with misc GUI enhancements such as help text, popovers, clearer errors, better loading indicators, etc.
  • The Desktop App's file size is now much smaller and unzips much faster. In the next release there will be a special CI build which removes the need to run Xvfb.
  • Test IDs have been removed. You will no longer see Cypress insert IDs into your test files. This was a feature we implemented on day 1 - the idea being we could track test performance and do regression analysis. Unfortunately, it will be a long time before we actually implement the data science to make this happen. For the time being, IDs presented unnecessary technical complexity and challenges with no real upside. We recommend you remove all of your existing IDs. We've added a new command to the CLI tool that can do this in one shot. cypress remove:ids You may see IDs be reintroduced at a later time when we provide analytics.
  • .then() now supports a timeout option. Fixes #110.
  • All error messages from using the CLI have been rewritten and improved.
  • Cypress will now automatically prompt you to add a project when using cypress run on a project that has not yet been added.
  • Domain cookies are now proxied better. There's still more work to do before they are 100% fixed but now most typical domain cookie scenarios should 'just work'.
  • We've put together a new example repo called The Kitchen Sink. It demonstrates usage of every single Cypress command.

Bugfixes:

  • Using cypress run in OSX now works again.
  • Added fs polling support to fix issues where Cypress would not detect file changes.
  • Tests should reload inside of Cypress faster when they are changed.
  • Better error messages when a command times out waiting for a promise to resolve. Fixes #108.
  • cy.viewport('ipad-2') now displays by default in portrait. Landscape orientation is now properly landscape. Fixes #100.
  • .click() will now properly click within an element's bounding box when a position option is passed and the calculated coordinates are a fraction. This previously forced the click to happen outside of the element. Fixes #99.
  • clientX and clientY event properties are now correctly calculated for elements when the page is scrolled. Fixes #98.
  • .check() and .uncheck() now correctly filter down the subject when a value is passed as an option. Fixes #94.
  • The Test Runner will now display your email address when you have not set a name in GitHub.

Misc:

  • Improved element display in Command Log when multiple elements are part of an assertion. Fixes #96.
  • cy.reload() now returns the window object of the newly reloaded page. Fixes #105.

Known Issues:

  • Clicking the 'reload' icon next to a test that does not have an ID will not work anymore. We're reworking this feature to work without the presence of IDs.

0.13.9

Released 01/28/2016

Bugfixes:

  • Prevent regression with not automatically scaling the viewport to fit into the window size

Misc:

  • Update links to match new documentation
  • .debug() has been zipped up - it no longer logs confusing debugging information and now logs information about the previously run command.
  • Cypress._, Cypress.$, Cypress.Promise, Cypress.Blob, Cypress.moment utilities have been moved off of cy and are now attached to Cypress. This is much more consistent with how the cy and Cypress APIs work. You can continue to use these objects off of cy but this has been deprecated and you will see a warning message.

0.13.8

Released 01/24/2016

Features:

  • Added cy.reload() command which does a full page refresh. This is the same as the user hitting the 'Reload' button. Additionally it matches the same argument signature as window.location.reload.

Bugfixes:

  • Fixed situation where cy.viewport() would not restore correctly between tests. Previously this would cause subsequent tests to be issued at the modified cy.viewport(). Now viewport is automatically restored to the settings in your cypress.json file.

Misc:

  • Using .its() on a function or .invoke() on a property now logs a deprecation warning. In the next major release this will become a full error. It is valuable to make a distinction whether you're operating on a property vs a function, and this change improves overall readability with less confusion.
  • Cypress deprecations and warnings are now prefixed with: Cypress Warning: to indicate this message is coming from Cypress

0.13.7

Released 01/17/2016

Bugfixes:

  • Prevent error during element stringification on <svg>. Fixes #93.
  • Clarified on errors related to not being able to run in CI. Previously there was a "catch all" error indicating your Cypress API Key was invalid. This was oftentimes incorrect. More specific errors have been added.
  • .type() has been upgraded to handle current selection ranges. Previously if an <input> had a selection range as Cypress began to type, this would be ignored. Cypress now takes this into account and will type over any selected text (as native typing would do).

Misc:

  • All Cypress related services have been updated to use HTTPS. We are forcing HTTPS redirects for everything except for api.cypress.io, which would be a breaking change. By the next minor release we will force that as well. Once we make this change we will remove all versions below 0.13.7. So make sure you are not locking the Cypress version when running in CI. We periodically remove old Cypress versions which have security flaws and this is an example of one.

0.13.6

Released 01/09/2016

Features:

  • All commands now retry if the associated element is disabled until the element is no longer disabled. If the command times out a specific error message is now thrown.
  • cy.server() and cy.route() now take an optional onAbort callback which fires anytime an XHR is aborted.

Bugfixes:

  • Fixed edge case where XHR's which were already aborted were aborted a 2nd time when tests end. Cypress now only aborts currently running XHR's which have not already been aborted.
  • When passing an array of aliases to cy.wait() there was an edge case where an incorrect error message was being thrown. The incorrect values were a combination of the wrong alias, the wrong timeout value, or the wrong request or response. Now Cypress correctly provides all 3 of these values.

0.13.5

Released 01/03/2016

Features:

  • Added new command: cy.go() which accepts back, forward, or an arbitrary Number.
  • cy.go() enables you to navigate back or forward in your history. Cypress intelligently handles situations where moving forward or back causing a full page refresh, and will wait for the new page to load before resolving and moving onto new commands. It additionally handles situations where a page load was not caused (such as hash routing) and will resolve immediately.

Misc:

  • Using {force404: false} will now output a warning explaining this is now the default option and can be removed safely.

0.13.4

Released 12/31/2015

Features:

  • Added waitForAnimations and animationDistanceThreshold configuration options.
  • Cypress now automatically detects and waits for an element which is animating to stop animating. The threshold that Cypress considers animating is set to a distance of 5px per 60fps. In other words, if your element is moving too fast for a user to interact with, then Cypress considers the element animating and will wait until it finishes before attempting to interact with it. When we say 'interact' we mean apply command actions like .click(), .select(), .type(), .check(), etc. Waiting for animations prevents a series of edge cases and weird bugs where Cypress was interacting with elements too quickly which might cause undesired side effects in your application which are hard to track down. The downside to this implementation is that for every action Cypress must wait at least 2 run loops before applying actions. This slows down every action command by about 32ms. If your app does not use animations you may wish to turn off this behavior in your cypress.json file.

Bugfixes:

  • Prevent undefined error when attempting to .click() an element which is fixed position when it is covered by another element. Cypress now correctly provides why it cannot click the element in question. Fixes #90.
  • Prevent infinite loop in edge cases when checking whether an element was hidden.

Misc:

  • The default behavior of cy.server() has changed from force404: true to become force404: false. In other words, Cypress will no longer forcibly send XHR's to 404 status when these XHR's do not match any existing cy.route(). This change better aligns with predictable usage for most Cypress users.

0.13.3

Released 12/25/2015

Notes:

  • Merry Christmas everyone ;-)

Features:

  • Overhauled the entire subsystem dealing with an element's visibility state. Previously we were using jQuery's .is(":visible") selector which was ineffective at truly determining when an element is "visible". Our changes now differ significantly from jQuery, but they match what a real user would consider visible, and the rules are fairly easy to explain. In other words these rules should just "make sense".
  • An element is considered visible if it can be "interactive" with a user. In other words, if the user is able to click, type, drag, or otherwise physically interact with the element it is considered visible.
  • Because of the additional complexities of how Cypress considers an element visible, we now have added the exact reason why an element is not visible when throwing an error. This means you'll see errors detailing whether an element or its parents have display: none, visibility: hidden, or whether an element is considered hidden because its effective width or height is zero. Whatever the reason, Cypress will indicate why your element is considered hidden.
  • Exposed Cypress.Dom.isHidden which holds the logic for determining an element's visibility. Modify this to change the rules.
  • Upgraded .select() to automatically retry when the <select> is disabled, its matching <option> is disabled, or when Cypress cannot find a matching <option>. This more correctly aligns with the behavior of other actions like .click(), which automatically retry until the element is ready to receive the action.

Bugfixes:

  • Throw on .select() when it cannot find a matching <option>. Also throw when <select> or a matching <option> is disabled. Fixes #91.
  • "Hidden" elements which actually displace height or width are now highlighted when restoring the DOM when a command is hovered.
  • Margin on zero client width / client height is now displayed correctly on command hover and more accurately mimics the way Chrome Dev Tools highlights elements.
  • Using history.back, history.forward, or history.go in CI or in headless mode now works again.

Misc:

  • The updated hidden rules apply to all assertions like should("be.hidden"), and how Cypress indicates an element is hidden displays in the Command Log.
  • Updated many error messages to be more explanatory and precise.
  • Elements which are stringified during errors now indicate their text content (truncated to 10 characters) <button>Save</button> or whether they contain children elements by indicating an ellipsis <div>...</div>.
  • The Routes instrument panel now displays the column: Stubbed instead of Status, which indicates whether a route is stubbing matching XHR's.

0.13.2

Released 12/20/2015

Notes:

Features:

  • Added responseTimeout configuration value.
  • cy.wait() has been upgraded to now use two separate timeout values. In previous versions cy.wait() used the commandTimeout and would automatically time out if the XHR did not achieve a response in that time frame. Now cy.wait() will go through two independent timeout phases. At first cy.wait() will wait for an XHR to be requested which matches its route. It will wait up to the value configured with requestTimeout (default 5000ms). After it sees a matching request it will then go into response waiting mode. It will wait up to the value configured with responseTimeout (default 20000ms). When cy.wait() fails you now receive a much better error message indicating exactly which phase failed. Whether a request was never sent out, or whether it timed out waiting for a response. This gives you the best of both worlds and prevents situations where Cypress was timing out on slow servers. By creating new configuration values: requestTimeout and responseTimeout you can now directly control this behavior without affecting other regular commands.

Bugfixes:

  • Prevent removing trailing new lines on fixtures after formatting.
  • Added cache buster to test files which forces them to be reloaded in the Sources panel after making modifications. In previous versions when test files were live reloaded Chrome would not display their new contents due to a bug in Dev Tools. We've now worked around this issue.

Misc:

  • Removed {stub: false} option from cy.server() and cy.route(). Cypress will now log a deprecation warning when you use the this option. Removing this option helps simplify the API because now Cypress can figure out whether you really want to stub the route based on whether you've provided a response or not. If you have not provided a response, the default behavior will be to not stub. If you do provide a response, Cypress will stub the route.
  • Repurposed requestTimeout to now mean the time we wait for an XHR to be requested. Changed cy.request() to now use responseTimeout configuration value.
  • Updated many error messages to be more consistent.
  • Added special error messages when elements cannot have actions applied to them with a suggestion to use {force: true}.

0.13.1

Released 12/11/2015

Notes:

  • We are aware of issues running in CI with Linux builds, and are working through those issues.

Bugfixes:

  • Prevent headless / CI from throwing errors on history.pushState and history.replaceState.
  • Prevent edge case where aliasing in the Command Log was aliasing the wrong command
  • Prevent XHR's from throwing errors on arraybuffer content. Properly set xhr.responseBody for XML, blob, and arraybuffer.
  • Headless running is now fixed in OSX. This was due to a bug with app signing + unzipping via the CLI.

0.13.0

Released 12/9/2015

Summary:

  • Though it may not look like much, this upgrade was a long time in the making. There were limitations in the way we were currently handling headless / CI builds which restricted our ability to make updates or fix bugs. Additionally CI runs would randomly crash for no good reason. We decided to split out the headless / CI process into its own independent Chromium application which is now independently controlled, and is much more reliable. This upgrade enables us to handle CI features coming down the pipe and was necessary for moving forward.

Features:

  • Upgraded Chromium for headless and CI runs from 41 to 45.
  • You will now see better stack traces and errors during cypress run / in CI. No more undefined is not a function errors.
  • Ported all links to use the new Cypress CDN.
  • Documentation to CLI.

Bugfixes:

  • New chromium upgrade prevents synchronous XHR freezes.
  • New chromium upgrade fixes situation where extremely long CI runs would sometimes randomly crash.
  • Fixed problem with rewriting content on elements which contained <svg> elements.

Breaking Changes:

  • Temporarily ignoring the --reporter option for headless / CI runs. Currently it is locked to the spec reporter, which is the default. This will be fixed in the next few patch releases.
  • Accessing window.history.go(), window.history.back(), window.history.forward() will throw an error during cypress run / CI. This is a regression that will be fixed - hopefully very soon. This is fixed in 0.13.3
  • While this new Chromium application passes our internal tests, it may crop up other regressions we aren't aware of. If you're experiencing different behavior in CI vs running locally in Chrome, this may be an indication of these.

0.12.8

Released 12/2/2015

Features:

  • There is now a new Error Messages Page which will provide additional explanation when you are getting errors from Cypress. These errors will be directly linked to (like how Angular provides errors).
  • Instead of hard coding external documentation, we now link everything through a redirection portal. This will prevent any links / documentation from ever breaking due to reorganization or renaming.
  • Cypress now throws a specific error message (with a link to further explanation) if you attempt to run commands outside of a test. Usually this happens accidentally when you write cy.commands inside of a describe or context block instead of the it. I've wasted too much time and almost bombed entire presentations / demos so I've finally stopped this from ever happening again. If you ever see this error message, trust me, you will forever thank me.
  • The error message: Cannot call cy.method() because the current subject has been removed or detached from the DOM. has been rewritten to provide much clearer information on why this is happening, including a string representation of your DOM element. Additionally it will have its own error page dedicated to explaining how this happens and what you can do to prevent it.

Misc:

  • Rewrote error message which is displayed when Cypress cannot parse your test / spec file. Now a list of suggestions are given and an external link is provided which further explains how this may happen.
  • Clarified the "Default Message" page when you have not cy.visit() your application yet.
  • Ignored .coffee, .scss, .less XHR's from displaying in the Command Log.

0.12.7

Released 11/30/2015

Bugfixes:

  • Prevent passing {multiple: true} incorrectly showing up in Command Log. Fixes #88.
  • Properly allow resource like XHR's which have query params such as jquery's {cache: false} option.
  • Correctly take into account <base> tag on XHR's. Fixes #89.

0.12.6

Released 11/29/2015

Features:

  • There are now Getting Started docs including configuration for cypress.json
  • Cypress now silently restarts the server whenever it detects a change to cypress.json - meaning you no longer have to manually reboot the server for changes to be picked up.
  • There is a new Cypress.config interface - akin to Cypress.env which provides access to configuration values.

Bugfixes:

  • Setup/Teardown code was not properly running on nested Mocha beforehooks which caused the error: The XHR server is unavailable or missing.... Fixes #80 and #86.
  • Prevent accidental mutation of cy.server() options when cy.route() was provided options. Fixes #84 and #85.
  • Using cy.title() would incorrectly search the <body> for title elements, and is now restricted to only searching in the <head>
  • Cross-Origin requests are now proxied by Cypress. In other words their URL's are transparently rewritten which bypasses CORS problems. This is a quick fix which should satisfy most of the problems users were having with CORS requests. However there is a much bigger change coming in 0.14.0 where the entire proxy layer will be rewritten to accommodate CORS, window.fetch and domain cookies flawlessly. As it stands Cypress is prone to errors in complex setups.

Misc:

  • Exposed visitTimeout and requestTimeout configuration.
  • Increased visitTimeout from 20s to 30s.
  • .click() will now throw if you are attempting to click more than 1 element. Pass {multiple: true} to enable this behavior again. Each element will be clicked serially and inserted into the Command Log.

0.12.5

Released 11/22/2015

Features:

  • Errors reading / writing cypress.json on project add are now displayed inline.

Bugfixes:

  • Prevent app crashing when cypress.json could not be read or written to when adding a project.

Misc:

  • App crashes now send a full stack trace (instead of 10 line truncation).
  • Better error handling + error messages when trying to read / write from cypress.json.

0.12.4

Released 11/19/2015

Features:

Bugfixes:

  • Removed problematic content-security-policy headers
  • Fixed situation where Cypress was not injected correctly when <head> tag had attributes
  • Prevent fixtures from being accidentally overwritten and having their content blanked out. There was a very subtle chance due to node's async file writing that as a file was being written with a formatted fixture, that another call to the same fixture would read in at that exact moment. If this happened the 2nd read would resolve with zero bytes, which would then end up rewriting the file back with zero bytes.

Misc:

  • alerts are automatically accepted now and a message logs to the console.
  • Added retina favicon. Fixes #83.
  • Removed nested cypress object in the cypress.json. Existing cypress.json files are transparently rewritten on the next server boot, so you can check in the modified cypress.json and all will be well. Fixes #82.
  • Improved performance of formatting fixtures.

0.12.3

Released 11/04/2015

Bugfixes:

  • Prevent .pause() from actually pausing during cypress run.
  • Fix for cy.request() SSL issues when host certificates were self signed.

0.12.2

Released 11/01/2015

Features:

  • There is now a cy.cmd and cy.command method which enables you to invoke commands by their string name. This is most useful when using namespaced custom commands. So Cypress.addParentCommand("dashboard.setSlider", ...) can be accessed by cy.cmd("dashboard.setSlider", arg1, arg2). (Docs have not been written yet).
  • Environment Variable support has been added and can be accessed in your tests with Cypress.env. The docs have been written Environment Variable and here.

Misc:

  • The URL property on all XHR's is now completely decoded, even on URLs which were originally encoded. The reason is for easier assertions and debugging. This URL property is specific to Cypress and does not actually affect the underlying XHR.

0.12.1

Released 10/28/2015

Bugfixes:

  • cy.route() will no longer throw that a response is needed when using cy.server({stub: false}).
  • Applying server defaults to Cypress.Server.defaults({}) now works as documented.
  • onRequest and onResponse can now be correctly set as permanent server defaults.
  • XHR URL is now decoded to make assertions easier. Fixes #75.

0.12.0

Released 10/23/2015

Summary:

  • XHR handling has been rewritten to be much more flexible, extensible, and future-proof.

Breaking Changes:

  • The object you receive after waiting on an XHR alias is now different. Previously this was a FakeXMLHttpRequest object which came from Sinon.js. Now it is a special XMLHttpRequest object which comes from Cypress. You may need to rewrite some of your assertions but we've tried to keep the signatures as close as possible.
  • The XHR's URL property will now always return you a Fully Qualified Domain Name including the origin, port, host, etc. Previously the URL property represented whatever the XHR was opened with. We've worked around this difference by when checking whether an XHR should be stubbed, the origin is tested both as present and omitted.

Deprecations:

  • Accessing requestJSON or responseJSON on XHR objects is deprecated, and will be removed in the next version. Accessing those properties will throw a warning which explains how to rewrite these.
  • cy.respond is temporarily deprecated because the semantics of how this works is completely different and will require more work (mentioned later on) before this can be re-enabled again.

Features:

  • All XHR's (regardless of whether they are stubbed or not) are now logged in the Command Log. Stubbed XHR's display as "XHR Stub" vs vanilla "XHR".
  • Stubbed XHR's will now show up in the Network Tab in Dev Tools. In other words they will really go out and you'll be able to inspect them just like regular XHRs.
  • Regular XHR's can now be aliased and waited on without actually being stubbed by passing {stub: false} to the cy.route().
  • XHR's will continue to work correctly even after a test ends. In previous versions, due to replacing the entire XHR object, your application would not work correctly after a test ended. This prevented you from "navigating around" and working with your app after the tests end.
  • Servers can now be disabled in the middle of a test. Previously once a server was started all XHR's would be stubbed.
  • You can now disable the force sending of 404 to all XHR's which are not stubbed. This allows you to mix and match, enabling some requests to be stubbed and others to hit your server and respond normally.
  • The default XHR configuration can now be overwritten in a single area.
  • Many new configuration options are available for controlling how XHR's are stubbed.
  • XHR's now include an Initiator stack regardless of whether they're stubbed. The Initiator stack includes the stack which caused the XHR to be created and sent.
  • The onConsole information related to an XHR has been updated to make it easier to understand why a route was or was not stubbed, and its associated request and response headers.
  • Response headers on XHR stubs will now automatically set their Content-Type based on the stub response. Previously this would always set to the Content-Type to application/json. Now if you force a response to be text or html, the Content-Type response header will be set appropriately.
  • You can now force other additional response headers to be sent on stubbed XHRs.
  • XHR's now snapshot twice - when the request is made and when the response is returned.
  • Removed sending sinon on every cy.visit().
  • The XHR object which is returned to you to via cy.wait() is now more consistent with other return values such as cy.request(). It should be much easier to work with request body, request headers, response body and response headers.

Bugfixes:

  • Routes no longer display as duplicated in between test runs when cy.server() is started prior to a cy.visit() and you cause a full page refresh, which caused all routes to be re-bound.
  • Any issues related to requestJSON or responseJSON being duplicated are now fixed. Fixes #65.
  • Fully Qualified XHR's which should be proxied are now correctly transparently rewritten to prevent CORS problems.
  • cy.route() - onRequest and onResponse callbacks are now called with cy as the context.
  • Filtering assets which should never be stubbed has been improved. Now .jsx templates pass-through correctly.
  • CORS Network Errors are now correctly caught.

Misc:

  • All ng based commands now display in the Command Log.
  • The built in XHR response delay has been removed since now all requests really go over the HTTP stack, which inherently has its own delay. You can still optionally force responses to be delayed by a set amount.

Almost there:

  • Support for the native fetch object.
  • Configuration to automatically force Cypress to wait for outstanding XHR's (like it does for other Page Events). This would mean when testing more traditional apps without XHR stubbing, commands would automatically wait until all outstanding XHR's complete. The internal retry loop needs to be rewritten to make this possible, but the XHR architecture is now there.

0.11.13

Released 10/08/2015

Bugfixes:

  • Prevent rejected promise from causing error about invalid API key during a CI run.

Misc:

  • Better error handling of rejected promises.

0.11.12

Released 10/07/2015

Features:

  • Snapshots can now be named and a command can have multiple snapshots.
  • Multiple snapshots are now cycled automatically on hover, and the name of the snapshot is displayed.
  • Most of the action commands now take multiple snapshots (giving you a precise look at an action prior to it happening, and then afterwards).

Bugfixes:

  • Fixed situation where an Uncaught Error was not being properly handled. Cypress would incorrectly continue to retry commands instead of canceling them, which lead to incorrect errors downstream in other tests.
  • Fixed situation where an error being thrown from an XHR was being improperly handled (in a slightly different way than the problem above).
  • Stopped sending CI data when cypress run was issued.

Misc:

  • CSS Improvements

0.11.11

Released 10/04/2015

Bugfixes:

  • Snapshots of .type() and .select() are no longer incorrect due to taking snapshots too early. Fixes #22.
  • Passing {force: true} to .blur() now logs correctly in the Command Log.

Misc:

  • Added delays on some tooltips.
  • The URL will now highlight in a yellow background during a revert DOM snapshot.
  • Moved snapshot message to be affixed to the bottom of the remote app in preparation for cycling through multiple snapshots.
  • Cleaned up the URL by removing some unused content.

0.11.10

Released 10/04/2015

Features:

  • .blur() now accepts {force: true} which removes error checking such as validating the element is urrently in focus.

Bugfixes:

Misc:

  • Removed cy.inspect command.
  • Added Cypress logo to nav.
  • CSS changes.

0.11.9

Released 10/03/2015

Features:

  • Added .zip as acceptable fixture extension. Content is sent back as base64.
  • Added docs to nav, consolidated organize into tests.
  • Added favicon.
  • Added tooltips everywhere.
  • Created new debugging command: .pause() which will pause executing commands and allow you to resume or step into the next command one at a time.
  • You can now stop and restart tests from the UI.
  • Added cy.Blob utilities for blob / string / base64 conversion. Useful for manually handling uploads.

Bugfixes:

  • "Cannot revert DOM while tests are running" now removes itself correctly.
  • Aliased DOM objects are now correctly stored on the test's ctx as instances of your jQuery (if one exists).

Misc:

  • Updated UI styles / tests list / run all.
  • Fixed alt tray icon so it shows up correctly on click.

0.11.8

Released 09/25/2015

Features:

  • Added cy.request() command which can issue XHR requests. The request is generated outside of the browser, and bypasses all CORS restrictions. Great for talking to an API for seeding, querying, building, etc.

Bugfixes:

  • Prevented edge case with cy.fixture() where it would not be able to be canceled without throwing an unhandled rejection error.

0.11.7

Released 09/25/2015

Bugfixes:

  • The debug window now works again.
  • Changed Linux build strategy which fixes not saving the internal .cy cache. Also fixes not being able to update from the GUI. Fixes #66.

0.11.6

Released 09/25/2015

Bugfixes:

  • Viewport is now properly restored to the default width / height on subsequent runs. Previously it would retain the last viewport size used until there was a new viewport command.
  • cy.should('contain', '...') now correctly escapes quotes and single quotes.
  • Assertion messages are no longer truncated, and instead will scale down by reducing the font-size and line-height after they exceed 110 characters. So you'll now always see the full assertion message.
  • Fixed some scenarios where assertions would not be logged as a child command.
  • Assertions based around the window or document object no longer cause Chai to bomb on formatting their object structures (due to cylic references) and instead now will show up as <window> and <document>.

Misc:

  • cy.window() now logs out to the Command Log and additionally verifies upcoming assertions.
  • cy.document() now logs out to the Command Log and additionally verifies upcoming assertions.
  • Removed numElements label on assertions which indicated the number of elements found if > 1. This was annoying and redundant since the inked command already had this number.

0.11.5

Released 09/20/2015

Features:

  • The Linux version of Cypress now works correctly for GUI Desktop versions (tested on Ubuntu Desktop). Previously it would only worked during cypress run in server versions. The tray used in OSX does not work with the Linux, so in Linux we just use a standard window + menu.
  • Added Desktop Icon.

Bugfixes:

  • Cypress now forces the initial cy.visit() not to be cached by the browser. This was incorrectly being cached which meant when you changed the cy.visit() it would not actually go out and fetch the new contents. Previously you had to check Disable Cache in the Network Tab inside of Chrome to prevent this bug. Unfortunately this has a significant performance drawback. If you use a cy.visit() before each test you will notice a degrade in performance because this request is no longer cached. This is a temporary problem until Cypress implements a more sophisticated caching strategy which optimizes these concerns. There is a lot to improve in this arena but it will take more time before it's implemented.
  • .should() will no longer throw an error when it is used as a parent command and has a callback function signature, and that callback function throws outside of an assertion. Instead now it logs correctly, handles the error, and displays this error for you.

Misc:

  • Many additional tests added to the multi-os deployment process.
  • When Cypress opens other windows they are now auto-focused.

0.11.4

Released 09/17/2015

Features:

  • .should() now accepts a callback function which will be retried until it does not throw. The callback function will be retried in the exact same way as passing regular string-based chainers to .should(). Having a callback function gives you an opportunity to massage the expected subject such as comparing multiple elements, creating an array of text or classes, etc.

Deprecations:

  • cy.wait(function) has been deprecated and you can safely rename this command to .should().

Misc:

0.11.3

Released 09/16/2015

Features:

  • When XHR's are aborted Cypress will display the stack trace indicating where in your app the XHR was aborted. Additionally it will display as (aborted) in the Command Log.

Bugfixes:

  • XHR's will no longer be ended early and display no status as if there was no response. Fixes #63.
  • XHR's which are aborted no longer cause an INVALID_STATE_ERR to be thrown. Fixes #62 and #34.
  • Cypress will no longer incorrectly revert to a previous test run's snapshot when tests are re-run.

0.11.2

Released 09/14/2015

Bugfixes:

  • Prevented bug where the assertion message: expected <x> element to exist would log over and over again when Cypress retried querying for a DOM element.

Misc:

  • .root() now outputs its subject when clicking on its command log. Fixes #55.

0.11.1

Released 09/14/2015

Bugfixes:

  • Utilizing cy.server() across multiple tests before a cy.visit() now works correctly. As a side effect now Cypress will rebind both the server and all routes whenever the remote window is reloaded (for whatever reason) - even during a test itself. This means you can navigate between pages without ever having to restart the server or routes (they will automatically rebind) when the window loads. Fixes #59.

Misc:

  • Providing a "number-string" as in: should("have.length", "1") will no longer throw an error.
  • Internal API changes for $Commands.

0.11.0

Released 09/13/2015

Summary:

  • This release marks a major change in the underlying algorithms used to prevent testing flake. It is a major goal of Cypress to combat and prevent all test flake. These algorithm changes go a long way towards making this a reality, and have been months in the making.
  • Cypress can now predict upcoming assertions and modifies its behavior until the intended state has been reached.
  • Command options exist / visible / length have been deprecated, these were confusing and limiting, and the same result can now be achieved using normal assertions. The end result is much more robust and much easier to understand.

Features:

  • Commands which precede assertions will now look downstream at those assertions and not resolve until their subject's state passes all assertions. Previously this was sort of implemented using Command Options and the eventually flag, but now this is the default behavior. Command Options only worked on DOM-based subjects, and now the new assertion verification works on everything else (including RL-based commands, etc). What this means is that Cypress can predict what you are requesting and automatically modifies its behavior until this state is reached. This prevents test brittleness / random test flake. Additionally this removes ever having to use cy.wait(Number) or cy.wait(Function) (though this is still a valid command). As a side effect, you will now see commands + their assertions in the spinning pending blue state. When assertions fail their associated command also fails at the same time. This visually represents the coupling between these two concepts. Another side effect is that timeout options do not need to be provided on the succeeding assertions, and can instead just be provided on the proceeding command. All of the coupled assertions will automatically be retried to the maximum timeout setting. Fixes #43.
  • Action commands will now insert an artificial delay after resolving to enable modern JavaScript frameworks time to flush their run loops. snapshots are delayed until after the action, resulting in more accurate snapshots because JavaScript frameworks would not process these DOM events until N milliseconds after they occurred. This has the unfortunate side effect of decreasing performance by about 5-10% but the end result is that it is much easier to debug and Cypress is less prone to flake caused by modern JavaScript frameworks. This change comes after collecting many data points and this was one of the easiest changes that help reduce flake. For users that don't use the latest and greatest JavaScript frameworks, this action delay can be reduced through cypress.json which may speed up large test suites.
  • Aliasing custom commands now intelligently figures out where to apply the alias without being specified inside of the actual custom command.
  • The algorithm for replaying aliased commands is now much more accurate, handles stale element references better, and will not replay commands which have a side effect (like action commands). The end result is Cypress will now almost always find the desired element by determining the minimum number of re-queries and is not susceptible to stale element references. Additionally using assertions on aliased elements now works (where previously using a Command Option on an alias would just be ignored. This was very difficult to implement but should be 100% solid. Fixes #36.
  • Assertions which actually produced 2 assertions (under the hood) such as should('have.attr', 'href', '/users/1') will now only log the 2nd assertion, unless the first fails.
  • Previously using eventually.have.length was impossible (and this would throw an error), but now this works as you'd expect with the default should('have.length').

Bugfixes:

  • Aliased commands now correctly output a command log again when they are replayed.
  • Assertions that involved an {exp} property are no longer incorrectly substituted with the #{this} subject.
  • Removed special logic for Angular which tapped into its digest cycle for queueing commands. This had unpredictable results when there was n interval set, and is now superseded by the new queueing system anyway (which is more performant).
  • Sinon's formatting of failed spy or stub calls is horrendously non-performant and would sometimes choke the CPU for several seconds. This formatting has been completely removed and will be replaced by something less outrageous later on. At the moment you can still use the built in Cypress debugging (clicking on a command log, etc) to see what the actual values were. Fixes #18.

Misc:

  • The internal retry loop of Cypress now runs at 60fps, instead of 20fps.
  • Cypress overrides chai's default inspection function for DOM elements meaning instead of seeing { Object (0, length, ...) } you will now ee the nicely formatted Cypress DOM element like: <button#primary.btn-large>.
  • Cypress now overrides chai's match chainer and provides a specific error message when a non regex value is provided. Fixes #58.
  • Cypress now handles length and exist assertion chainers in a very specific way, providing a detailed message on failure, and utomatically slices out any stale element references.
  • The contain assertion chainer from chai-jquery has been extended to match the same selector logic as cy.contains() - meaning it now checks the value of input[type=submit].
  • Tweaked the label for displaying the number of elements a command resolved with (now displays 0 differently than > 1).
  • Removed the eventually flag in assertions as now this is the default behavior on normal assertions.
  • Deprecated all Command Options. You will see a very nice and simple error message explaining how to convert these to assertions.
  • .within() can now be silenced with {log: false}.
  • Many error messages have been rewritten to be much more fluent and easier to understand.

Other News:

  • Cypress is currently seeking to raise a Series A. This will enable us to grow the team and speed up development but seeking it has come at a ost for current development speed. If you have any VC connections please send them our way.

0.10.8

Released 08/21/2015

Features:

  • Reporters in CI can now be specified.
  • Added teamcity reporter.

0.10.7

Released 08/16/2015

Features:

  • port can now be specified as a CLI argument and will override any values stored in cypress.json.

Misc:

  • When running through the CLI, Cypress will now display an error if the server's port is currently in use. Previously this would not output an error and the process would just hang.

0.10.6

Released 08/15/2015

Bugfixes:

  • Fixed edge case where Cypress would not correctly handle POST or PUT requests with a JSON body. These requests would just hang and eventually time out.

Misc:

  • Project ID's can be programmatically set now.

0.10.5

Released 08/13/2015

Bugfixes:

  • Running a specific test won't open/close immediately when starting up (fixes weird flickering effect).
  • .check() and .uncheck() commands will now correctly "end" even if they were noop due to the element already being in a checked or unchecked state.

Misc:

  • Currently running tests now displays a spinner to indicate they are currently running.
  • Optimized performance of command lists.
  • Commands which were silenced with {log: false} will now always display in the Command Log if they were part of a replayed chain of commands due to an alias reference becoming stale. Previously they would not display which was very confusing.
  • Sinon.JS is no longer minified.

0.10.4

Released 08/11/2015

Bugfixes:

  • The OSX Cypress App was not being properly signed (since 0.10.0) due to an oversight in our deployment process. This has been fixed now and additional checks have been added to ensure the deployed version is properly signed. Updating within the app was unaffected. This bug only effected fresh downloads from the internet.
  • Errors / crashes encountered when updating to newer versions through the app should be fixed now.

0.10.3

Released 08/10/2015

Bugfixes:

  • Cypress Errors in hooks (beforeEach, etc) will no longer cause Mocha to fire its end event thus ending the entire run. In CI, this would cause the test suite to end early. Uncaught Mocha errors will however continue this behavior. Cypress does not yet have a "skipped" visual state for tests which were skipped, so at the moment it may look a little strange and unpredictable.

Misc:

  • Tweaked clicking algorithm to re-verify an elements visibility anytime the click retries its retry logic. Previously this check only happened once at the beginning of the click.
  • In CI, the window size (not the viewport) has been changed from 1024x768 to 1280x720. This will only affect screenshot artifacts which are taken automatically with cy.screenshot() (coming soon) or whenever a test fails (also coming soon).

0.10.2

Released 08/10/2015

Bugfixes:

  • Memory optimizations in CI.
  • Reduce noise in logs.
  • Prevented external NODE_ENV mutations causing problems in CI.

Misc:

  • Better error tracing.

0.10.1

Released 08/07/2015

Bugfixes:

  • Fixed missing dependency for CI.

Misc:

  • Cypress now logs out your project's API key on a failed CI run.

0.10.0

Released 08/06/2015

Summary:

  • Cypress is now able to run all the tests, run in the terminal, and includes support for Linux and CI. Additionally, most of the functionality of he GUI Desktop App can now be accessed through command line arguments.
  • Because each operating system requires a specific build of Cypress - a new CLI tool has been created which abstracts away these differences and orchestrates the Desktop App regardless of which OS you are running.
  • This CLI tool is now published on NPM, though the documentation still needs to be written.
  • There is now a download service to access the latest version of Cypress and previous versions.
  • Cypress aims not only to make it easier to write tests, but after you build a test harness, it will make it easier to dive into failed tests (hat run in CI). This release paves the way for providing after-run results and allowing you to dive into those failures.

Breaking Changes:

  • Due to security upgrades, adding projects in previous versions will no longer work. Upgrade and everything should be okay.

Features:

  • The latest version of Cypress can be downloaded here: http://download.cypress.io/latest.
  • Cypress can alternatively be downloaded / installed / managed through the CLI utility.
  • Cypress can now be run through the terminal.
  • You can now run all of your tests inside of the GUI App.
  • You can use the CLI tool to run Cypress in CI. The documentation for this needs to be written, but it will be very simple to do. You will robably only have to write 2 lines in your CI scripts to run Cypress.
  • You can configure CI to use any reporter built into Mocha, and additionally we are adding JUnit XML output (for Jenkins) as a built in default.
  • You can write your own custom reporter which Cypress can use in CI.
  • Console output from your apps is suppressed while running in the terminal.

Bugfixes:

  • Several security problems with projects have been closed in preparation for running in CI.
  • Extensive memory profiling has been done and Cypress has implemented several strategies for aggressively causing garbage collection. The ebugging tools (which allow you to walk back in time through DOM snapshots, or access objects from previous tests) could exhaust all available emory in previous versions. This likely never affected most users, but if a user ran 1000's of tests (which have been written in Cypress) it ould bomb. Now Cypress only stores data for up to 50 tests, and will begin purging data past that. When run in the terminal, Cypress doesn't apply any of its debugging tools, so CI will be unaffected.
  • Several instances of memory leaks were plugged up.

Misc:

  • Everything except for the cypress driver is now minified.
  • Some users have reported problems upgrading previous versions. This is because we changed the name from "cypress" to "Cypress" including some inaries. If your upgrade does not finish you can redownload the latest version of Cypress or use the CLI tool to reinstall it.
  • Our build and testing processes have been upgraded to accommodate Linux builds.
  • Sinon.JS object formatting during errors has been suppressed (when using spies/stubs) due to its horrendous performance when comparing deeply nested objects. This means you won't see the (mostly) useless error output from Sinon, but given Cypress debugging tools you can still inspect objects and figure out what went wrong.

0.9.6

Released 07/27/2015

Bugfixes:

  • Fixed server crash on improperly handled proxy error.
  • Upgraded logic to redirect back to the Cypress client app on manual URL changes.

0.9.5

Released 07/14/2015

Features:

Misc:

  • Swapped out ugly nonsense refresh icon to square-o to represent a test which has not run yet.

0.9.4

Released 07/06/2015

Features:

  • cy.contains(), cy.get(), and traversal commands will now all log out heir last known $el on failure. This means the $el will be highlight during Command Log hovering, and will display in the console on click. his should make debugging failed DOM based commands much easier. Fixes #52.

Bugfixes:

  • Fixed edge case with cy.contains() and command options visible and exist where it would always fail ven though the matched element was in the correct state.

Misc:

  • cy.contains() now throws when provided the command option: length because it will only ever return 1 element.

0.9.3

Released 07/06/2015

Features:

  • Proxied jQuery: $ onto cy as cy.$ and specific class methods: Event, Deferred, ajax, get, getJSON, getScript, post.
  • Proxied moment onto cy as cy.moment.
  • The URL will now automatically be restored when hovering over the Command Log to indicate the state of the URL at the time the command ran.
  • .click() now accepts an optional: position argument (center, topLeft, topRight, bottomLeft, bottomRight). Center is still the default.
  • .click() now accepts an optional x and y coordinate argument, which is relative to the top left corner of the element. Fixes #50.
  • Click docs have been updated to reflect these changes.

Bugfixes:

  • onBeforeLoad and onLoad callbacks to cy.visit() are now invoked with cy as the context.
  • Cypress logo now displays in About Page.

Misc:

  • Internal refactoring to Cypress.Mouse.

0.9.2

Released 07/04/2015

Features:

  • Added About page in desktop application annotating the current version.
  • cy.fixture() now supports these additional extensions: .html, .txt, .png, .jpg, .jpeg, .gif, .tif, .tiff.
  • Image fixtures will be sent back as a base64 string.
  • HTML fixtures will be prettified and saved back over the original.

Misc:

  • Added more tests around various areas of the desktop application and ID generator.

0.9.1

Released 07/03/2015

Features:

  • cy.viewport() can now accept an orientation when providing a preset. Valid orientations are landscape and portrait.

Bugfixes:

  • The scaffolded spec_helper.js now correctly returns its object literal in the onConsole callback.
  • .type() now correctly logs its message to the Command Log when provided options.
  • .type() has been upgraded to handle situations where as it's typing, 3rd party code mutates the value either synchronously or asynchronously. The caret is automatically moved to the end position matching browser behavior.

Misc:

  • Deprecated Cypress.command, instead use Cypress.Log.command to output a Command Log. Updated scaffolding on new projects to reflect this change.
  • cy.contains() now outputs much more explicit error messages when given command options. Fixes #49.
  • cy.route() no longer validates response value when {respond: false} is passed in as options. Fixes #48.
  • .invoke() and .its() will now log out the $el if it's a DOM object, which will now correctly highlight the $el during a command revert. Additionally if these commands have been called on a DOM object, their onConsole message will include the DOM objects.

0.9.0

Released 07/02/2015

Summary:

  • cy.viewport() is a new command which will resize the viewport to a specified width and height. There is ow a default viewport size of 1000x660.

Features:

  • Your application's viewport dimensions will now automatically scale to fit regardless of your screen's size. This enables you to test resolutions larger than what your screen is capable of displaying. Additionally this fixes edge cases caused when there was a difference in viewports between users.
  • The viewport's dimensions will now dynamically display accurately as they are changed in the header area.
  • The viewport's scale will now dynamically display accurately as it is changed.
  • Each command will automatically restore the viewport to the dimensions at the time the command was issued. In other words, scrolling over each command will restore exactly what Cypress "saw" when it issued the command.
  • Several common viewport presets have been added for convenience

Misc:

  • Cypress now requires a viewport to be issued at all times. By default it is 1000x660 but can be changed in your cypress.json file with he keys: viewportWidth and viewportHeight.

Bugfixes:

  • Scrollbar styling is no longer hijacked by Cypress.

Misc:

  • Updated remote application iframe styles.

0.8.1

Released 06/30/2015

Bugfixes:

  • .select() will now fire a focus event on the <select> even if the window isn't in focus.
  • .click() has been upgraded to be more intelligent about firing focus events, and now takes into account the previously focused element.
  • .type() and .clear() will not issue change events or focus events unnecessary when chaining together multiple actions which do not change the element or cause it to lose focus. Fixes #47.

0.8.0

Released 06/26/2015

Summary:

Features:

  • .type() now outputs "Key Events Table" which is a console.table of every key typed, the charCode, all vents that fired, and whether any were preventedDefault.
  • .type() now accepts the following special character sequences: {selectall}, {del}, {backspace}, {esc}, {{}, {enter}, {leftarrow}, {rightarrow}.
  • .type() implements cursor and selection and range accurately like a real keyboard.
  • .type() now fires change events exactly like real browsers when {enter} is used.
  • .type() will fire textInput and input events exactly like a real browser. Fixes #7.
  • .type() now follows all of the spec in regards to preventingDefault on any event that would insert a character such as keydown, keypress, textInput.
  • .type() events should be 100% identical to real browser KeyboardEvents including charCode, which, keyCode, data, etc.
  • .type() now inserts a small delay 10ms between each keystroke to simulate a real user typing.
  • input events are now correctly fired when .select() chooses an <option>.
  • change events are now fired exactly how a browser does (when an input loses focus and its value has changed since its last focus event). You'll see these fire after you use .blur() directly, or use another action command on another element.

Bugfixes:

  • Using .type() in an input[type=number] will no longer prepend the value. Fixes #26.
  • [contenteditable] elements can now be focused and blurred.
  • aborting during .click() / .dblclick() now correctly cancels remaining queued click/dblclick events.

Misc:

  • console.groups are now collapsed by default.
  • .type() now validates the chars and will throw on anything other than a string or finite number.
  • .type() now throws on empty strings.
  • Removed several libs that used to handle typing simulation and rewrote typing from scratch.

0.7.6

Released 06/23/2015

Bugfixes:

  • Prevent infinite loop due to a trifecta of rare circumstances with .click(). Clicking will now retry sync after it attempts to scroll past the element covering up the desired clickable element. Fixes #46.

0.7.5

Released 06/19/2015

Bugfixes:

  • .click() now takes into account being covered by a fixed positioned element and will increase the window's scroll offset to account for this. There are still more improvements to be made before this is bulletproof though.
  • cy.contains() could potentially resolve to a null subject if the matching content was split across multiple nested children elements. This has been fixed and contains will now return the first, deepest element which contains text potentially spread over multiple text nodes and/or children elements.

0.7.4

Released 06/18/2015

Misc:

  • Attempting to .click() a select element will now throw an error. The error guides you to using the .select() command, as that is the command you should use to change a <select> value.
  • cy.route() responses are now validated. If responses are null or undefined Cypress will throw a very specific error message.
  • Cypress will now display cypress.json parse errors when attempting to boot a project when there is a syntax error in cypress.json.

0.7.3

Released 06/17/2015

Features:

  • .select() will now output a command log.
  • .select() will now have click / focus events fired on itself and the selected options (as per the pec).
  • .select() is now inline with the other Action commands and will retry until the element naturally becomes selectable.

Bugfixes:

  • Action command options are now properly formatted, instead of saying Object{4} they will display the overridden default options - ie: force, timeout, interval.
  • Sending {force: true} to Action commands will no longer error out if the element is not visible. Forcing the action to take place now correctly removes all error checking prior to issuing the action and events.

Misc:

  • Removed stack traces on AssertionErrors in the console since those come from chai and are basically useless.

0.7.2

Released 06/17/2015

Bugfixes:

  • Removed factoring in the total time a test has been running when determining when its command timeout. This fixes a bug where commands down he chain would timeout earlier than their specified {timeout: num} option.

0.7.1

Released 06/16/2015

Bugfixes:

  • DOM commands which can retry now correctly support {timeout: num} options which will raise the timeout beyond the standard commandTimeout rom cypress.json.
  • <script>, <img>, <video> commands or any other element which supports crossorigin attribute now are proxied correctly. The crossorigin attribute removes sending cookies with the HTTP request and now there is a fallback to figure out the remoteHost even in this situation.

Misc:

  • Support for redirects with status code 303.

0.7.0

Released 06/15/2015

Features:

  • Cypress now has first class support for fixtures (official docs coming soon).
  • Introduced new cy.fixture() command.
  • Fixtures support json, js, and coffee files with image support coming soon.
  • Fixtures are automatically validated, with error messages propagating up to the client.
  • Fixtures are automatically formatted / indented for easy debugging.
  • Example fixture is automatically created with every project.
  • Example support files are now automatically created with every project.
  • cy.route() now accepts an alias as its response.
  • cy.route() additionally accepts a special fixture: or fx: keyword which automatically loads the fixture as the response.

Bugfixes:

  • Clicking giant yellow CypressError now displays associated XHR error in the console.

Misc:

  • RegExp arguments are now properly formatted in the Command Log.
  • Update bluebird to 2.9.27.
  • Update glob to 5.0.10.

0.6.14

Released 06/11/2015

Features:

  • Command logging has been upgraded to support "page events", which are different than commands. Now events which happen (XHR/page load/url change/spies/stubs/mocks) log out visually differently and do not use a command number. This should be easier to parse what was a real command and what was a page event.
  • When the url changes this is now logged as a page event, and its onConsole logs what caused it to change.

Misc:

  • Internal refactor / improvements to support long lived runnable objects to work with page events.
  • Request Commands (now page events) have now been renamed to 'XHR'.
  • cy.document() now returns the raw document object instead of a jQuery wrapped document object.
  • When .its() or .invoke() fails it will include the current subject n the onConsole log.
  • cy.wait() now logs out when its referenced aliases, and its onConsole output displays the XHR return values.
  • cy.hash() and cy.url() no longer pass the return value as the command log's message, which made no sense and was unlike every other command.

0.6.13

Released 06/09/2015

Bugfixes:

  • Traversal methods now correctly return their $el even when {log: false} option is passed.

Misc:

  • .type() now works with contenteditable attributes.

0.6.12

Released 06/09/2015

Bugfixes:

  • When Cypress detects a page loading event it will now clear out the subject so the next commands cannot reference previous page DOM elements.
  • .check() and .uncheck() will no longer output additional error'd commands when their associated click fails.

Misc:

  • .type(), .clear(), .check(), .uncheck() now all take {force: true} options to force the click to happen and skip additional clickable checks.
  • Now when you click the giant yellow failure messages if the error is a CypressError instead of logging nothing it will now find the command associated to that error and display the same message as if you clicked the failed command.

0.6.11

Released 06/08/2015

Bugfixes:

  • .clear() and .type() no longer output additional error'd commands hen their associated click fails.
  • Changed scrolling elements into view to use top strategy instead of bottom which fixes times where the middle of an element was not yet in he viewport. Fixes #42.

Misc:

  • .submit() now errors if it's been called on >1 form element. Fixes #41.
  • Coordinates and hitboxes are now logged and displayed on .clear() and .type().

0.6.10

Released 06/06/2015

Bugfixes:

  • Improved clicking algorithm to reduce edge cases where element could not be clicked but should have been able to be clicked.

Misc:

  • .click() accepts {force: true} which will force it to issue the click event and bypass checking to ensure element is physically clickable.
  • Elements which are children of a container with overflow are automatically scrolled prior to a click (which is an abstraction around real user behavior).
  • Elements that are covering up an element you targeted for .click() are now logged out in the command console.
  • All elements are now logged out as real DOM elements instead of jQuery wrapped elements. This has several upsides. Chrome will allow you to immediately interact with these elements, drilling into their contents, displaying the element box model on hover, etc. This prevents you from having to expand the jQuery elements and click "Reveal in Elements Panel".

0.6.9

Released 06/06/2015

Bugfixes:

  • Custom commands no longer error out if they are the very first cy command.

0.6.8

Released 06/05/2015

Features:

  • cy.clearCookie() and cy.clearCookies() have been added as new commands.
  • Cypress will automatically clear all cookies before each test run.
  • Named the spec + app iframe so that inside of Chrome Dev Tools the iframe selector will clearly distinguish which iframe is your application versus Cypress.

Bugfixes:

  • Hitbox is no longer covered up by element layers on DOM revert.
  • Finally tracked down and fixed edge case causing empty view to display when tests were not empty. Fixes #13

Misc:

  • cy.visit() now accepts {log: false} to prevent logging out (useful in custom commands).
  • cy.contains() is now scoped by default to the <body> instead of document which prevents it from returning elements in the head like title.

0.6.7

Released 06/04/2015

Features:

  • When reverting the DOM, associated command elements are now automatically scrolled into view.
  • Hitboxes are now displayed on the screen based on the actual coordinates where an action command event took place.
  • Click events now display event information about the mousedown / mouseup / click default action + propagation in the command console.
  • Preventing default action on mousedown will no longer give focus as per the spec.
  • Click events are now issued in the exact center of an element (taking into account 2d transforms) and provide the coordinates in the command console and in the actual event
  • Click events now take into account whether the associated element is being covered up by another element, and will retry or fail with an exact error message if the click was unable to be issued due to this reason.
  • Click events will now intelligently provide focus to the first focusable element on the stack at the click coordinates, or will give focus to the window.
  • Click events will issue the click to the topmost element based on the click coordinates and not necessarily to the element you requested to e clicked (which simulates exactly how a real click works). If this happens it is noted in the command console and provides the Actual Element Clicked.

Bugfixes:

  • When hover over commands element layers (2d transforms like rotation) are now taken into account and displayed correctly.
  • There was a bug when checking / unchecking :checkbox where it did not properly receive focus.

Misc:

  • Click events are now replicated almost identically to the W3C click spec. They should behave for all intents and purposes, identically to real clicks in the browser.

0.6.6

Released 05/31/2015

Bugfixes:

  • Fixed regression related to cy.visit() not re-visiting when current match matches remote url.

0.6.5

Released 05/23/2015

Features:

  • When Cypress detects a regular HTTP page loading event (where we're leaving the current page and requesting a new one) it will now insert a loading command which indicates to the user Cypress has stopped running commands until the new page loads.
  • If for some reason this new page errors Cypress will display the initial 500 error messages just like cy.visit().
  • Cypress now waits 20s (which matches cy.visit()) for the new page to load instead of 4s previously.

Bugfixes:

  • .submit() will actually submit the form for real now, instead of just firing the submit event. Now it's been upgraded to be able to be canceled or have its returnValue set to false and will not submit the form. Don't ask how I missed this one. I as once a young naive programmer who trusted the DOM not to be the abomination it actually is.

Misc:

  • No longer send back a 500 message when initial response status code is 4xx.

0.6.4

Released 05/21/2015

Bugfixes:

  • Host header HTTPS protocol handling fixed.
  • Incorrectly handling query params on redirects fixed.
  • Other header edge cases fixed.

0.6.3

Released 05/20/2015

Misc:

  • Cypress should work with self signed SSL certificates now.

0.6.2

Released 05/20/2015

Bugfixes:

  • Using the length option in querying or traversal commands now logs out in the Command Log. Fixes #40.
  • Other scenarios are fixed where command options would show incorrect number of object keys due to a bug in underscore's reduce with an object that has a length key. Fixes #35.

0.6.1

Released 05/15/2015

Bugfixes:

  • Using the length option in traversal commands works properly now. Fixes #38.
  • Command logging now works even if no cy commands have been issued. Fixes #37.

Misc:

  • Removed cy proxy commands: each, map. These didn't really "fit" into the concept of a command, and with .invoke() or .its() they're accessible anyway, so nothing is really lost.

0.6.0

Released 05/14/2015

Features:

  • Pushstate application routing now works 100% reliably with NO hacky overrides in all browsers.
  • All incompatible a / link / form elements are transparently rewritten to be compatible including FQDN and protocol-less href / src.
  • Cookies are automatically cleared between page refreshes, during app startup, and leaving the test page.
  • 3rd Party cookies are now additionally cleared. All cookies are now accessible to the client in preparation for cy.clearCookies().
  • Manual navigation after tests run now works reliably.
  • Navigating between full page refreshes during tests now works reliably.

Bugfixes:

  • Server-side redirects are now completely transparently handled and supported.
  • URLs are no longer altered in any weird way.
  • Problematic headers are now automatically stripped from remote responses.
  • 3rd party headers are now properly proxied onto all responses.
  • Custom headers and other headers "of interest" are rewritten for transparent compatibility.
  • gzip compression now handled and proxied correctly.

Misc:

  • Completely overhauled the URL and proxy system used to serve remote applications.
  • Drastically simplified the architecture required for proxying.
  • Improved reliability for displaying the remote url.
  • Namespaced all cypress internal routes.
  • Many internal development / debugging processes improved.
  • Added 100+ new tests surrounding serving remote content and processing requests.
  • Renamed all remaining old references to eclectus.
  • All responses are now streamed using content-encoding: chunked.

0.5.15

Released 05/07/2015

Bugfixes:

  • Reverted window.location overrides. This broke things in unexpected ways and after further testing would not have worked on Firefox and IE. It's back to the drawing board (but I have some ideas). Apps using pushState routing are broken again.

0.5.14

Released 05/06/2015

Features:

  • Cypress now works with JS applications that use pushState and replaceState routing (commonly known as HTML5 History) without having to change any application code.
  • Cypress now always updates the remote URL whenever your application changes its URL through the vast variety of ways it can do this.

Bugfixes:

  • Removed iframe and link[rel=stylesheet] elements during DOM revert.
  • Server instrument now correctly displays the number of responses their corresponding routes have had.
  • Spies/Stubs/Mocks instrument now correctly displays the number of calls their corresponding methods have had.
  • When users navigate between pages with commands, like .click(), Cypress now correctly waits until the age has finished loading before running more commands. Previously this waited for the unload event, which did not fire synchronously, and ow we bind to beforeunload which does. Additionally Cypress checks to ensure beforeunload did not return a non-undefined value.

Misc:

  • More changes to prepare for server adapters,

0.5.13

Released 05/04/2015

Features:

  • New cy.message and cy.msg commands in preparation for cypress-ruby, cypress-node, cypress-* packages/gem to talk directly to your back end.

Bugfixes:

  • Using querying or traversal commands will no longer throw a 2nd command error when using improper sizzle selectors.
  • Argument formatting display for command messages is fixed. There were instances of leading commas, or no commas on some commands.

Misc:

  • Changed default port from 3000 to 2020 to avoid standard port conflicts with commonly used back ends. Afterall, using Cypress is testing with 2020 vision. ;-)
  • Updated bluebird to 2.9.25.
  • Began implementation in preparation for cross browser testing coming sometime relatively soon.

0.5.12

Released 04/30/2015

Features:

  • Introduced new command option length which cues Cypress into not resolving matched elements until their length matches the option provided.

Bugfixes:

  • cy.respond will not resolve until all of the queue'd XHR's have resolved.

Misc:

  • Cypress now throws on .should() if any DOM member isn't in the DOM, except for exist assertions.
  • Cypress now throws on eventually.have.length assertions. Use implicit {length: n} command options instead.
  • Cypress overrides chai exist assertion to really mean: "does this subject exist in the document?"

0.5.11

Released 04/29/2015

Bugfixes:

  • Fixed missing aliasType from primitives and some DOM aliases, which prevent the background color from displaying in the UI.

Misc:

  • Optimized performance for hovering / exiting commands. Heavily reduced the CPU on revert / restore the DOM.

0.5.10

Released 04/28/2015

Features:

  • cy.server() now accepts a delay option which will delay all responses to requests (including 404) based on the value in ms
  • cy.server() now accepts a respond option which can turn off automatic responding to requests.
  • cy.route() now accepts a delay option which overrides the delay option set in cy.server() to just matched requests.
  • cy.route() now accepts a respond option which will turn off automatic responding to just matched requests.
  • Fixes #14.
  • cy.wait() now accepts an alias property called request. Example: cy.wait('@getUsers.request') which ill resolve once the XHR is initially requested, before it is responded to. This allows you to test things when a request is in flight.
  • Added cy.respond command which will respond to all pending requests when {respond: false} is set in the server or route.
  • .debug() now displays pending requests and completed requests.
  • The command UI now displays pending requests as a pending command.

Misc:

  • Updated sinon to 1.14.1.

0.5.9

Released 04/26/2015

Features:

  • Added .spread() method which spreads an array as individual arguments to a callback function,like .then().
  • During an update Cypress will now display the updating message in the same coordinates as when the app was open by clicking the tray icon.
  • After an update Cypress will now open back up and show itself in these same coordinates.
  • cy.wait() can now accept an array of route aliases which will wait until all have completed. This array of resolved XHRs will become the next subject.
  • Each time an alias in used with a cy.wait(), Cypress will not resolve until the Nth request matching the outing alias responds. Fixes #4.
  • cy.get() has been upgraded to accept a routing alias. By default it will yield the last matched request, but also supports special alias properties which return a different request or potentially an array of requests.

0.5.8

Released 04/24/2015

Features:

  • .as() can now alias primitives and objects other than routes or DOM.
  • .as() automatically assigns this alias to runnable.ctx which makes it available synchronously.
  • .as() does not allow several reserved words and will throw if you attempt to alias as one of them.
  • cy.get() can now accept all alias types and will display the labels in the UI differently based on the alias type.
  • Cypress now displays a message when the Desktop App update is actually being applied instead of doing nothing and looking like it's crashed.

Bugfixes:

  • .as() now throws on empty strings or non string arguments.
  • Desktop App debug logs no longer sort in the wrong direction.
  • Permissions are now restored during a cypress update for the logs and cache.
  • Prevent 3rd party windows from gaining focus over main window.

Misc:

  • Removed cy.assign, this has been folded into .as().
  • Updated chokidar to 1.0.1.

0.5.7

Released 04/23/2015

Features:

  • The insanity that is URL parsing to figure out absolute, relative, absolute-path-relative, http, sub domains, and local files should work in most cases. In other words, Cypress has implemented the vast majority of url parsing based on the w3c URL spec.

Bugfixes:

  • Prevent reverting the DOM while tests are running. Fixes #28.
  • Fix edge case with forced focusing / blurring an element when document is not in focus and the element is no longer in the DOM.
  • Visiting relative paths which are served from your file system works again.
  • Visiting absolute paths in the iframe now displays the correct URL in the address bar again.

0.5.6

Released 04/22/2015

Features:

  • Cypress now detects the difference between a forced async done test timeout vs a regular command timeout, and will throw the appropriate message indicating whether the user forgot to invoke done or whether the timeout happened due to a command.

Bugfixes:

  • cy.visit() now properly times out when the load event does not occur within the time out window.
  • If a page loads after a cy.visit() times out it will no longer cause an exception in the onBeforeLoad handler.

Misc:

  • Increased cy.visit() timeout from 15s to 20s.
  • cy.visit() now throws a custom error message when it times out (instead of an incorrect / confusing default Mocha timeout message).
  • Using a debugger while running a test will no longer always cause the test to time out (yay!).
  • Override default Mocha timeout handling, replaced with custom logic. Removes many bizarre edge cases.

0.5.5

Released 04/20/2015

Features:

  • When main app window comes into focus, it will automatically focus other peripheral windows.
  • Added explicit error message when using child commands on a subject which has been detached or removed from the DOM.
  • Cypress now detects when an async test is passed and not all commands have finished running. It will throw an explicit error message in this situation.

Misc:

  • Error messages no longer break within words.

0.5.4

Released 04/20/2015

Features:

  • Enhanced .should() to accept eventually flag to automatically retry assertions until timeout is reached.

Misc:

  • Repurposed .and() to be an alias of .should() for chainability.
  • Removed cy.to.

0.5.3

Released 04/19/2015

Bugfixes:

  • Handle relative path segments which walk up past the remote host ../../assets/app.css.
  • Throw explicit error for null, undefined, and "" arguments to cy.contains(). Fixes #24.

Misc

  • Improved onConsole message for cy.focused() when no element was returned. Fixes #23.

0.5.2

Released 04/17/2015

Bugfixes:

  • Fixed missing files from deployment. Added tests around this.

0.5.1

Released 04/16/2015

Misc:

  • Updated dependencies: bluebird, fs-extra, sinon-as-promised.
  • Updated nw to 0.12.1.

0.5.0

Released 04/15/2015

Misc:

  • Snapshot source code.

0.4.7

Released 04/15/2015

Misc:

  • Added automated functional NW tests during deployment in preparation for 0.5.0 release.

0.4.6

Released 04/11/2015

Features:

  • Added "invisible" icon to a command when its matched element(s) are invisible.
  • Running a single test will now automatically expand to display its commands.
  • Any failing test will now automatically expand to display its commands.
  • Failing tests which become passing will automatically collapse again.

0.4.5

Released 04/10/2015

Features:

Bugfixes:

  • Improved options logging and argument logging for all commands. Fixes #8.

0.4.4

Released 04/09/2015

Features:

  • Added .not() traversal filtering method. Suggested in #16.

Misc:

  • Improved error messages for traversal failures. Errors now include the parent context DOM element. Fixes #11.
  • Improved error messages for invalid cy.route() arguments. Fixes #20.

0.4.3

Released 04/09/2015

Features:

  • Added functionality which enables cy.server() and cy.route() to be created prior to cy.visit(). The server and routes will apply to the next page which is visited. This allows you to stub requests which happen on page load. Suggested in #17.
  • cy.visit() now takes an optional onBeforeLoad callback option which is invoked when your page begins to ender but prior to its load event.

Misc:

  • Improved error message when attempting to use cy.agents or anything else which requires a remote sandbox. Fixes #12.

0.4.2

Released 04/09/2015

Bugfixes:

  • Remove accidental debugger left in uncaught overloads (used only in Dev).
  • Prevent memory leak with Cypress helper listeners on every re-run of the tests.
  • Prevent memory leak with custom 3rd party Cypress listeners in spec windows on every re-run of the tests.
  • Prevent error from being thrown when .only's are switched in between active test runs.

0.4.1

Released 04/08/2015

Features:

  • javascripts files can now utilize snockets, browserify, or requirejs.

Bugfixes:

  • Handle javascripts and preprocess them as we do regular specs. Fixes: #15.
  • Fixed an edge case when writing a test with a done callback alongside cy commands. This situation would always cause a timeout after 30 seconds even though the test would pass.

Misc:

  • Internally refactored Cypress for easier testability / debuggability.
  • Organized files around in preparation for OS release.
  • Added lightweight module system / optimized Cypress listeners to prevent duplicated events.
  • Changed url strategy for sending down spec files.

0.4.0

Released 04/02/2015

Features:

  • sinon-as-promised is now a bundled extension.
  • tests without an id now run (with a random temporarily assigned id).
  • tests with a duplicate id to another test will now run (with a random temporarily assigned id).
  • tests or suites which are manually re-run from the UI now hide all of the other tests / suites.

Bugfixes:

  • Fixed hook failure associated to wrong failed current test when grep was set.
  • Async tests which used a cy command and had a done callback was always undefined. Now it's back to real Mocha function done(err).
  • Fixed bug in Mocha where it incorrectly associates hook.ctx.currentTest to the wrong test. Mocha Issue.
  • cy.title() no longer logs twice on a failure.
  • Fixed putting an .only on a large list of tests that would sometimes not clear the previous runnables in the UI.

Misc:

  • Optimized first test run after hard refresh.
  • Performance improvements on successive runnable iterations.
  • Aborting currently running tests performance improvement.
  • Live reload performance improvements when tests are changed.
  • Added 100+ tests covering Runner + Reporter behavior.
  • Aggressively cleaned up listeners after each test completion + run.
  • Added additional Cypress events for 3rd party custom handling.

0.3.15

Released 03/28/2015

Misc:

  • Drastically improved file watching on large projects with many tests. Instead of choking the CPU at nearly 100% indefinitely we now optimally watch the current working files for changes.

0.3.14

Released 03/27/2015

Bugfixes:

  • Socket.io and chokidar are now being cleaned up when a project is closed. Previously chokidar file watchers would stick around indefinitely causing a memory leak each time any project is closed and reopened.

0.3.13

Released 03/27/2015

Features:

  • cy.visit() now detects a local url. localhost, 0.0.0.0, 127.0.0.1 can omit the http:// protocol.

Bugfixes:

  • cy.contains() now properly escape quotes in the text.
  • cy.visit() now inserts a trailing slash intelligently into the correct path position (not after query params or hashes).
  • cy.visit() will no longer log 2 failed commands on error.
  • Hovering on commands which delay resolving their $el will now properly highlight again.

Misc:

  • .debug() returns the current subject now.
  • upgraded jsUri to 1.3.0.
  • cy.visit() now throws when url argument isn't a string.
  • Cypress.Log instances now fire attrs:changed event. Removed state:change event.

0.3.12

Released 03/26/2015

Bugfixes:

  • Aliases which replay their commands will no longer break the current chain and therefore not unintentionally null our their subject for the ext command.
  • Highlighting $el's on DOM restore now works again.
  • Asserting against cy.focused() will indent command logs now.
  • Prevent failed .should() and cy.to from outputting a second error'd command log.
  • Removed memory leaks surrounding Mocha runner.
  • Captured remote page uncaught errors again which fail corresponding tests.
  • Captured spec iframe errors again and preserve their stack trace.

Misc:

  • cy.focused() is now a parent command.
  • Memory usage improvements.

0.3.11

Released 03/25/2015

Bugfixes:

  • Automatic command errors now properly show as errored commands.
  • .invoke() now correctly checks for a subject before running.

Misc:

  • cy.Promise (Bluebird) is now publicly available.

0.3.10

Released 03/24/2015

Bugfixes:

  • Test duration is now correct and only updates when tests finish.
  • Failing a hook will no longer continue to count the duration forever.

Misc:

  • Bumped Mocha to 2.2.1
  • Users now see a specialized error message when Cypress could not serve static files from the file system.

0.3.9

Released 03/24/2015

Features:

  • Instead of waiting until commands resolve, commands are immediately inserted with a pending status.
  • Pending commands are now visually distinguishable.
  • Created new Cypress.Log interface for greater control over the display of commands.
  • Available aliases are now logged in the console on .debug().

Bugfixes:

  • Allow projects to be scrolled when >4 are added.
  • .type() accepts remaining input[type=*] that users can type into.
  • Cause + Effect commands are now logged in the correct order. IE, clicking something which causes another command to insert will be inserted correctly in the order they arrived
  • numRetries is no longer shown in commands.
  • .clear() now logs a command.
  • Promise.reduce bugs are now fixed, causing events on a collection of elements in the synchronous wrong order.
  • cy.chain is now coercively returned instead of cy which prevents losing access to the subject in custom commands.
  • Trailing slashes are removed when serving initial files from the file system directly.

0.3.8

Released 03/22/2015

Features:

  • Added icons + tray icons.

Bugfixes:

  • Prevent cypress.app from showing in taskbar.
  • Clicking on tray twice will toggle hide/show of app.

0.3.7

Released 03/21/2015

Features:

  • Code Signed Mac App to prevent "Unidentified Developer" message on open.

0.3.6

Released 03/20/2015

Features:

  • Added external link to changelog when checking for updates :-)

Bugfixes:

  • Force trailing slash on all cy.visit() to fix relative links href="assets/app.js".
  • Fix sourceMappingURL browser bug http:/localhost:4200/app.css.map.
  • Fix test titles not being escaped due to refactoring.

0.3.5

Released 03/20/2015

Bugfixes:

  • Fix missing moment.js from bower.json.
  • Fix missing trailing slash from initial cy.visit() requests.
  • Fix missing __initial=true query param on initial redirects.

Misc:

  • Updated $.simulate to 1.0.1.

0.3.4

Released 03/19/2015

Features:

  • .type() now causes the subject to receive focus event.
  • .type() now causes previously focused elements to receive blur event/
  • Typing {enter} now handles form submit logic as per the HTML spec.
    • Form with 1 input, no defaultButton.
    • Form with 2 inputs, no defaultButton.
    • Form with disabled defaultButton.
    • Form with multiple defaultButtons.
    • Correctly processes defaultButton click event, form submit event.
    • Intelligently handle defaultPrevented events from descendants.

Bugfixes:

Misc:

  • Updated bluebird to 2.9.14.

0.3.3

Released 03/18/2015

Features:

  • Filtered out Ajax requests for .js, .html, .css files by default.
  • cy.server() can configure whether this is turned on or off.

Bugfixes:

  • Prevent cy.server() from slurping up Angular async template GETs.

Misc:

  • Inlined Google Fonts into vendor.css.