TestCafe v1.7.0 Released
This release introduces access to the browser and platform information from test code.
Enhancements
⚙️ Identify the Browser and Platform in Test Code (#481)
TestCafe now allows you to obtain information about the current user agent. These data identify the operating system, platform type, browser, engine, etc.
Use the t.browser property to access user agent data.
import { Selector } from 'testcafe';
fixture `My fixture`
.page `https://example.com`;
test('My test', async t => {
if (t.browser.name !== 'Chrome')
await t.expect(Selector('div').withText('Browser not supported').visible).ok();
});
The t.browser object exposes the following properties:
Property | Type | Description | Example |
---|---|---|---|
alias | String | The browser alias string specified when tests were launched. | firefox:headless |
name | String | The browser name. | Chrome |
version | String | The browser version. | 77.0.3865.120 |
platform | String | The platform type. | desktop |
headless | Boolean | true if the browser runs in headless mode. |
false |
os | Object | The name and version of the operating system. | { name: 'macOS', version: '10.15.1' } |
engine | Object | The name and version of the browser engine. | { name: 'Gecko', version: '20100101' } |
userAgent | String | The user agent string. | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/77.0.3865.120 Safari/537.36 |
prettyUserAgent | String | Formatted string with the browser’s and operating system’s name and version. | Chrome 77.0.3865.75 / macOS 10.14.0 |
The following example shows how to create a beforeEach hook that runs for specific browser engines.
import { Selector } from 'testcafe';
fixture `My fixture`
.page `https://example.com`
.beforeEach(async t => {
if (t.browser.engine.name === 'Blink')
return;
// ...
});
You can also use t.browser to generate the screenshot path based on the browser name. This prevents screenshots taken with t.takeElementScreenshot in different browsers from being overwritten.
import { Selector } from 'testcafe';
fixture `My fixture`
.page `https://example.com`;
test('My test', async t => {
const loginButton = Selector('div').withText('Login');
await t.takeElementScreenshot(loginButton, `auth/${t.browser.name}/login-button.png`);
});
For more information and examples, see Identify the Browser and Platform.
Bug Fixes
- Fixed an error on pages that submit forms immediately after loading (#4360 by @bill-looby-i)
- TestCafe now scrolls to elements located inside Shadow DOM roots (#4222)
- Fixed an error that occurred when TypeScripts tests that use Node.js globals were run with TestCafe installed globally (#4437)
- Fixed the TypeScript definition for the
Selector.withAttribute
method’s return type (#4448) - Fixed an issue when custom browser providers could not take screenshots (#4477)
- Support pages that use advanced ES6 module export
- Fixed compatibility issues with Salesforce Lightning Web Components