Changelog
v1.20.1 (2022-08-08)
fixture
and test
definitions (PR #7187).Changelog
v1.20.0 (2022-07-14)
:warning: Warning: Impending breaking change. TestCafe v1.20 is the final version of the framework to support TypeScript 3. The next update will abandon TypeScript 3 in favor of TypeScript 4.
TestCafe v1.20.0 includes two major capabilities: an API testing toolkit and the ability to set a global test page URL. Additionally, TestCafe 1.20.0 introduces experimental support for Chrome User Flow Replays, as well as a number of under-the-hood improvements.
TestCafe v1.20.0 includes a comprehensive set of server-side API testing tools. You can add dedicated API tests to your test suite, or include API testing methods in existing functional tests.
The new Request test action executes an HTTP request and returns the server's response.
const responseBody = await t.request(`http://localhost:3000/helloworld`).body;
t.expect(responseBody).contains('Hello World') // true
Read the API Testing Guide for a full overview of the framework's API testing capabilities.
You can now define a single starting URL for all the tests in your test suite.
Declare the baseUrl
in one of the following three ways:
Once you define a baseUrl
, you can omit fixture and test URLs entirely, or define them relative to your baseUrl
:
"baseUrl": "https://devexpress.github.io/testcafe"
fixture`Test structure`
.page`./example`; // starts at https://devexpress.github.io/testcafe/example
TestCafe v1.20.0 introduces experimental, limited support for Google Chrome user flow recordings.
Record page actions in Google Chrome and export the recording as a JSON file. TestCafe will play the recording back just like it would a generate a test report
Read the User Flow Recordings guide to learn more.
The next version of TestCafe will adopt TypeScript 4 and lose compatibility with TypeScript 3.X.
To indicate the breaking change, we will increment the framework's major version number - from 1 to 2.
TestCafe 2.0 will be released later this month.
Better Google Chrome video capture
TestCafe v1.20.0 uses the Screen Capture API to record videos of Google Chrome test runs. This results in a significantly better test recording framerate and image quality.
When the t.typeText
action raises an error, TestCafe mistakenly awaits the target element for the second time (#6623)
Concurrent test runs do not always generate concurrent test run reports (#7062)
TestCafe doesn't properly handle errors raised inside the requestMock
function (#6703)
The default terminal viewport width is too low for non-tty terminals (Issue #5919, PR #6930 by @PayBas)
TestCafe cannot switch to an invisible iframe (#4558)
Update incorrect TypeScript definitions (PR #7069 by @karolnowinsky)
Some SVGs don't meet the visibility criteria (#6998)
Changelog
v1.19.0 (2022-05-26)
TestCafe v1.19.0 introduces three major capabilities: a Cookie Management API, suite-wide test hooks, and suite-wide request hooks.
Previous versions of TestCafe lacked dedicated cookie management methods. Users had to write custom client functions to add and remove cookies. This technique was complicated and, at times, limiting. Some cookie manipulation actions --- such as HTTP-only cookie management --- were very hard to integrate into the test suite.
The latest version of the framework includes a proper set of cookie management tools that can handle a wide variety of tasks. Learn more about the new methods in our documentation: deleteCookies, getCookies, setCookies.
fixture('[API] Delete Cookies')
.page('https://devexpress.github.io/testcafe/example/');
test('Should delete all the cookies with the specified url', async t => {
// Set a cookie for the examples page.
await t.setCookies({ name: 'apiCookie1', value: 'value1' });
// Set a cookie for the 'thank you' page.
await t.setCookies({
name: 'apiCookie2',
value: 'value2',
}, 'https://devexpress.github.io/testcafe/example/thank-you.html');
// Check the cookies.
let cookies = await t.getCookies();
await t
.expect(cookies.length).eql(2)
.expect(cookies[0]).contains({ name: 'apiCookie1', path: '/testcafe/example/' })
.expect(cookies[1]).contains({ name: 'apiCookie2', path: '/testcafe/example/thank-you.html' });
// Delete cookies from the 'thank you' page.
await t.deleteCookies({ domain: 'devexpress.github.io', path: '/testcafe/example/thank-you.html' });
// Check the cookies.
cookies = await t.getCookies();
await t
.expect(cookies.length).eql(1)
.expect(cookies[0]).contains({ name: 'apiCookie1', path: '/testcafe/example/' });
});
Many TestCafe users employ test hooks --- functions that run before and after tests and fixtures. In TestCafe v1.19.0 and higher, you can attach hooks to test runs, as well as apply test hooks to your entire suite. This capability requires the use of a JavaScript configuration file.
Learn more about hooks from our newly updated hook guide.
Request hooks are functions that intercept HTTP requests and mock HTTP responses. Earlier versions of TestCafe let you attach request hooks to one test or fixture at a time. You can now define global request hooks and attach them to multiple tests or fixtures in your suite.
Read the Request Hooks guide to learn more.
TestCafe ignores CLI browser arguments when they conflict with the configuration file (#6618)
The outdated moment.js
dependency contains a critical vulnerability (PR #6996 by @vergilfromadyen)
TestCafe proxy doesn't always serve cookies with the secure
attribute (testcafe-hammerhead/#2715)