All Versions
Latest Version
Avg Release Cycle
21 days
Latest Release
70 days ago

Changelog History
Page 15

  • v0.18.4 Changes

    November 17, 2017

    โœจ Enhancements

    โœ… :gear: WebSockets support (testcafe-hammerhead/#911)

    โœ… TestCafe provides full-featured WebSocket support (wss and ws protocols, request authentication, etc.).

    ๐Ÿ› Bug Fixes

    • โœ… You can click on elements under the Status bar and specify the transition css property (#1934)
    • โž• Added support for pages with the rest and default parameter instructions (testcafe-hammerhead/#1336)
    • โœ… Pages with several base tags are supported (testcafe-hammerhead/#1349)
    • โœ… Redirects from cross-domain to same-domain pages are processed (#1922)
    • โœ… Contenteditable custom elements are correctly recognized (testcafe-hammerhead/#1366)
    • โœ… Internal headers for fetch requests are set correctly (testcafe-hammerhead/#1360)
  • v0.18.3 Changes

    November 08, 2017

    ๐Ÿ› Bug Fixes

  • v0.18.2 Changes

    October 26, 2017

    ๐Ÿ› Bug Fixes

    • ๐Ÿ Screenshots are captured correctly when using High DPI monitor configurations on Windows (#1896)
    • ๐Ÿ›  Fixed the Cannot read property 'getItem' of null error which is raised when a console message was printed in an iframe before it is completely loaded (#1875)
    • ๐Ÿ›  Fixed the Content iframe did not load error which is raised if an iframe reloaded during the switchToIframe command execution (#1842)
    • โœ… Selector options are passed to all derivative selectors (#1907)
    • ๐Ÿ›  Fixed a memory leak in IE related to live node collection proxying (testcafe-hammerhead/#1262)
    • โœ… DocumentFragment nodes are correctly processed (testcafe-hammerhead/#1334)
  • v0.18.1 Changes

    October 17, 2017

    โœ… --reporter flag name fixed (#1881)

    ๐Ÿ“š In v0.18.0, we changed the --reporter CLI flag to --reporters. In this release, we rolled back to the previous flag name.

    โช Compatibility with RequireJS restored (#1874)

    ๐Ÿš€ Changes in v0.18.0 made TestCafe incompatible with RequireJS. It is fixed in this recovery release.

    We apologize for any inconvenience.

  • v0.18.0 Changes

    October 10, 2017

    โœจ Enhancements

    โœ… :gear: Testing in headless Firefox

    โœ… We have added support for headless testing in Firefox (version 56+) and Chrome.

    testcafe firefox:headless tests/sample-fixture.js
        .then(failedCount => {
            // ...

    โœ… :gear: Outputting test results to multiple channels (#1412)

    โœ… You can now print a report in the console and saved it to a .json file by specifying multiple reporters when running tests.

    testcafe all tests/sample-fixture.js -r spec,json:report.json
    const stream = fs.createWriteStream('report.json');
        .reporter('json', stream)
        .then(failedCount => {

    โœ… :gear: Entering the debug mode when a test fails (#1608)

    โœ… TestCafe can now automatically switch to the debug mode when a test fails. Test execution is paused so that you can explore the tested page to determine the failure's cause.

    ๐Ÿ’ป To enable this behavior, use the --debug-on-fail flag in the command line or the debugOnFail option in the API.

    testcafe chrome tests/fixture.js --debug-on-fail{ debugOnFail: true });

    โœ… :gear: Interacting with the tested page in debug mode (#1848)

    When debugging your tests, you can now interact with the tested page. Click the Unlock page button in the page footer to enable interaction.

    ๐Ÿ“„ [Unlock page button](docs/articles/images/unlock-page-button.png)

    Click Resume to continue running the test or click Next Step to skip to the next step.

    โœ… :gear: Chrome and Firefox are opened with clean profiles by default (#1623)

    โœ… TestCafe now opens Chrome and Firefox with empty profiles to eliminate profile settings' and extensions' influence on tests.

    However, you can return to the previous behavior using the :userProfile browser option.

    testcafe firefox:userProfile tests/test.js

    โœ… :gear: Customizable timeout to wait for the window.load event (#1645)

    ๐Ÿ’… Previously, TestCafe started a test when the DOMContentLoaded event was raised. However, there are many pages that execute initialization code on the window.load event (which is raised after DOMContentLoaded because it waits for all stylesheets, images and subframes to load). In this case, you need to wait for the window.load event to fire before running tests.

    ๐Ÿš€ With this release, TestCafe waits 3 seconds for the window.load event. We have also added a pageLoadTimeout setting that allows you to customize this interval. You can set it to 0 to skip waiting for window.load.

    ๐Ÿ’ป The following examples show how to use the pageLoadTimeout setting from the command line and API:

    testcafe chrome test.js --page-load-timeout 0{
        pageLoadTimeout: 0

    โœ… You can also use the setPageLoadTimeout method in the test API to set the timeout for an individual test.

    fixture `Page load timeout`
        .page ``;
    test(`Page load timeout`, async t => {
        await t

    โœ… :gear: Access messages output by the tested app to the browser console (#1738)

    โœ… You can now obtain messages that the tested app outputs to the browser console. This is useful if your application or the framework it uses posts errors, warnings or other informative messages to the console.

    ๐Ÿ’ป Use the t.getBrowserConsoleMessages method that returns the following object:

        error: ["Cannot access the 'db' database. Wrong credentials.", '...'], // error messages
        warn: ['The setTimeout property is deprecated', '...'],                // warning messages
        log: ['[09:12:08] Logged in', '[09:25:43] Changes saved', '...'],      // log messages
        info: ['The application was updated since your last visit.', '...']    // info messages

    ๐Ÿ’ป Note that this method returns only messages posted via the console.error, console.warn, console.log and methods. Messages the browser outputs (like when an unhandled exception occurs on the page) are not returned.

    ๐Ÿ“„ For instance, you can use React's typechecking feature, PropTypes, to check that you assigned valid values to the component's props. If a PropTypes rule is violated, React posts an error to the JavaScript console.

    ๐Ÿ’ป The following example shows how to check the React prop types for errors using the t.getBrowserConsoleMessages method:

    // check-prop-types.js
    import { t } from 'testcafe';
    export default async function () {
        const { error } = await t.getBrowserConsoleMessages();
        await t.expect(error[0]).notOk();
    // test.js
    import { Selector } from 'testcafe';
    import checkPropTypes from './check-prop-types';
    fixture `react example`
        .page `http://localhost:8080/`  //
        .afterEach(() => checkPropTypes());
    test('test', async t => {
        await t
            .typeText(Selector('.form-control'), 'devexpress')

    โœ… :gear: Defining drag end point on the destination element (#982)

    The t.dragToElement action can now drop a dragged element at any point inside the destination element. You can specify the target point using the destinationOffsetX and destinationOffsetY options.

    import { Selector } from 'testcafe';
    const fileIcon      = Selector('.file-icon');
    const directoryPane = Selector('.directory');
    fixture `My Fixture`
        .page ``;
    test('My Test', async t => {
        await t
            .dragToElement(fileIcon, directoryPane, {
                offsetX: 10,
                offsetY: 10,
                destinationOffsetX: 100,
                destinationOffsetY: 50,
                modifiers: {
                    shift: true

    โœ… :gear: TestCafe exits gracefully when the process is interrupted (#1378)

    โœ… Previously, TestCafe left browsers open when you exited the process by pressing Ctrl+C in the terminal. โœ… Now TestCafe exits gracefully closing all browsers opened for testing.

    ๐Ÿ› Bug Fixes

    • โœ… Tests no longer hang in Nightmare (#1493)
    • โœ… The focus event is raised when clicking links with tabIndex="0" (#1803)
    • โœ… Headless Chrome processes no longer hang after test runs (#1826)
    • โœ… setFilesToUpload no longer throws a RangeError on websites that use Angular (#1731)
    • ๐Ÿ›  Fixed a bug where an iframe got a wrong origin (#1753)
    • โœ… does not throw an error if document.defaultView is null (testcafe-hammerhead/#1272)
    • โœ… No error is thrown when the handler passed to addEventListener is undefined (testcafe-hammerhead/#1251)
    • โœ… An error is no longer raised if the processed element is not extendible (testcafe-hammerhead/#1300)
    • ๐Ÿ›  Fixed a bug where an onclick handler did not work after click on a Submit button (testcafe-hammerhead/#1291)
    • ๐Ÿ’… Images with style = background-image: url("img.png"); are loaded correctly (testcafe-hammerhead/#1212)
    • โœ… Documents can contain two ShadowUI roots (testcafe-hammerhead/#1246)
    • โœ… HTML in an overridden document.write function is processed correctly (testcafe-hammerhead/#1311)
    • โœ… Elements processing works for a documentFragment as it is added to the DOM (testcafe-hammerhead/#1334)
  • v0.17.2 Changes

    ๐Ÿ› Bug Fixes

    • โœ… Taking a screenshot on teamcity agent works correctly (#1625)
    • ๐Ÿณ It is possible to run tests on remote devices from a docker container (#1728)
    • โœ… TestCafe compiles TypeScript tests correctly if Mocha or Jest typedefs are included in the project (#1537)
    • ๐ŸŽ Running on remote devices works correctly on MacOS (#1732)
    • โœ… A target directory is checked before creating a screenshot (#1551)
    • โœ… TypeScript definitions allow you to send any objects as dependencies for ClientFunctions (#1713)
    • โœ… The second MutationObserver callback argument is not missed (testcafe-hammerhead/#1268)
    • ๐Ÿ”— Link's href property with an unsupported protocol is set correctly (testcafe-hammerhead/#1276)
    • โœ… The document.documentURI property is processed correctly in IE (testcafe-hammerhead/#1270)
    • โœ… JSON.stringify and Object.keys functions work properly for a MessageEvent instance (testcafe-hammerhead/#1277)
  • v0.17.1 Changes

    ๐Ÿ› Bug Fixes

    • โœ… The hover action no longer fails for elements that hide on mouseover (#1679)
    • ๐Ÿ“š SelectText and SelectTextAreaContent TypeScript definitions match the documentation (#1697)
    • ๐Ÿ TestCafe finds browsers installed for the current user on Windows (#1688)
    • โœ… TestCafe can resize MS Edge 15 window (#1517)
    • โœ… Google Chrome Canary has a dedicated chrome-canary alias (#1711)
    • ๐Ÿ Test no longer hangs when takeScreenshot is called in headless Chrome Canary on Windows (#1685)
    • โœ… Tests fail if the uncaughtRejection exception is raised (#1473)
    • ๐ŸŽ TypeScript tests run on macOS with no errors (#1696)
    • โœ… The test duration is reported accurately (#1674)
    • โœ… XHR requests with an overridden setRequestHeader function returned by the XhrSandbox.openNativeXhr method are now handled properly (testcafe-hammerhead/#1252)
    • โœ… HTML in an overridden document.write function is now processed correctly (testcafe-hammerhead/#1218)
    • โœ… Object.assign is overridden (testcafe-hammerhead/#1208)
    • โœ… Scripts with async functions are processed correctly (testcafe-hammerhead/#1260)
  • v0.17.0 Changes

    โœจ Enhancements

    โœ… :gear: Testing Electron applications (testcafe-browser-provider-electron)

    โœ… We have created a browser provider that allows you to test Electron applications with TestCafe.

    ๐Ÿ”Œ To do this, install the browser provider plugin from npm:

    npm install testcafe-browser-provider-electron

    ๐Ÿ”ง Create a .testcafe-electron-rc file that contains the Electron plugin's configurations. The only required setting here is mainWindowUrl. It is a URL (or path) to the main window page that relates to the application's directory.

        "mainWindowUrl": "./index.html"

    Place this file in the application root directory.

    Next, install the Electron module.

    npm install [email protected]

    โœ… You can now run tests. Specify the electron browser name and the application path โœ… when the test launches.

    testcafe "electron:/home/user/electron-app" "path/to/test/file.js"

    ๐Ÿ‘€ Nota that you can also test the Electron app's executable files. See the plugin readme to learn more about the Electron browser provider.

    โœ… :gear: Concurrent test execution (#1165)

    โœ… We have added concurrent test launch. This makes a test batch complete faster.

    โœ… TestCafe launches one instance of each specified browser by default. Tests are run one by one in each of them.

    Enable concurrency and TestCafe launches multiple instances of each browser. It distributes the test batch among them. The tests are run in parallel.

    ๐Ÿ’ป To enable concurrency, add -cin the command line or use the runner.concurrency() API method. ๐Ÿ’ป Specify the number of instances for each browser.

    testcafe -c 3 chrome tests/test.js
    var testRunPromise = runner

    ๐Ÿ“š See Concurrent Test Execution for more details.

    โœ… :gear: Further improvements in automatic waiting mechanism (#1521)

    We have enhanced the waiting mechanism behavior in certain scenarios which required wait actions.

    โœ… :gear: User roles preserve the local storage (#1454)

    โœ… TestCafe now saves the local storage state when switching between roles. You get the same local storage content you left when you switch back.

    โœ… This is useful for testing websites that perform authentication via local storage instead of cookies.

    ๐Ÿ› Bug Fixes

    • โœ… Selector's withAttribute method supports searching by strict match (#1548)
    • โœ… Description for the path parameter of the t.takeScreenshot action has been corrected (#1515)
    • โœ… Local storage is now cleaned appropriately after the test run.(#1546)
    • ๐Ÿ’… TestCafe now checks element visibility with a timeout when the target element's is negative (#1185)
    • โœ… Fetching an absolute CORS URL now works correctly. (#1629)
    • โž• Add partial support for proxying live node collections (the GetElementsByTagName method) (#1442)
    • ๐ŸŽ TypeScript performance has been enhanced. (#1591)
    • โœ… The right port is now applied to a cross-domain iframe location after redirect. (testcafe-hammerhead/#1191)
    • โœ… All internal properties are marked as non-enumerable. (testcafe-hammerhead/#1182)
    • ๐Ÿ‘Œ Support proxying pages with defined referrer policy. (testcafe-hammerhead/#1195)
    • โœ… WebWorker content is now correctly proxied in FireFox 54. (testcafe-hammerhead/#1216)
    • โœ… Code instrumentation for the document.activeElement property works properly if it is null. (testcafe-hammerhead/#1226)
    • โœ… length, item and namedItem are no longer own properties of LiveNodeListWrapper. (testcafe-hammerhead/#1222)
    • โœ… The scope option in the serviceWorker.register function is processed correctly. (testcafe-hammerhead/#1233)
    • โœ… Promises from a fetch request are now processed correctly. (testcafe-hammerhead/#1234)
    • ๐Ÿ›  Fix transpiling for the for..of loop to support browsers without window.Iterator. (testcafe-hammerhead/#1231)
  • v0.16.2 Changes

    ๐Ÿ› Bug Fixes

    • โœ… Typing text now raises the onChange event in latest React versions. (#1558)
    • ๐Ÿณ Screenshots can now be taken when TestCafe runs from the Docker image. (#1540)
    • โœ… The native value property setters of HTMLInputElement and HTMLTextAreaElement prototypes are now saved. (testcafe-hammerhead/#1185)
    • โœ… The name and namedItem methods of an HTMLCollection are now marked as non-enumerable. (testcafe-hammerhead/#1172)
    • โœ… Code instrumentation of the length property runs faster. (testcafe-hammerhead/#979)
  • v0.16.1 Changes

    ๐Ÿ› Bug Fixes

    • โœ… A typo in RoleOptions typedefs was fixed (#1541)
    • โœ… TestCafe no longer crashes on node 4 with an unmet dependency (#1547)
    • โœ… Markup imported via meta[rel="import"] is now processed. (testcafe-hammerhead/#1161)
    • โœ… The correct context is passed to MutationObserver. (testcafe-hammerhead/#1178)
    • โœ… The innerHtml property is no longer processed for elements that don't have this property. (testcafe-hammerhead/#1164)