Skip to main content

Limitations for TestCafe

Firefox on macOS 15 (Sequoia)​

Firefox is not supported on macOS 15 (Sequoia) due to a known macOS firewall bug that blocks Firefox network connections. Use macOS 14 for Firefox testing on ARM.

Special Characters in Test Names​

Test names are validated before execution. The following rules apply:

Allowed characters (no change):

  • Letters: A-Z, a-z
  • Digits: 0-9
  • Dash: -
  • Underscore: _

Replaced characters (automatically converted to -):

+ , @ / % ' \ = ? < > ` # & $ " | : ! ( ) (space) . ; [ ] * { } ~ ^ " " ' ' —

These characters are silently replaced with a dash (-) to prevent errors in report generation.

Disallowed characters (test will fail to start):

  • Non-ASCII characters such as ®, ™, –, é
  • Emoji characters
  • Any other characters not listed in the allowed or replaced categories above

If your test name contains disallowed characters, the test will be rejected with an error response before execution begins.

Chrome 130+​

TestCafe 3.6.2 and lower do not work with Chrome 130+. Disable native automation as a workaround.

Chrome/Edge + Sauce Connect​

When using Sauce-Connect, the browsers Chrome and Edge will not make use of the tunnel when browsing a website. They will behave as if there is no tunnel defined.

TestCafe Native Automation + Chrome + Sauce Connect​

If your tests are issuing TestCafe HTTP requests and require a Sauce Connect tunnel, you will need to either set the proxy manually or disable TestCafe's Native Automation.

Disable Native Automation​

This is the recommended approach, which poses less of a hassle. Disable Native Automation in your .testcaferc.js:

module.exports = {
disableNativeAutomation: true,
};

and then ensure that our runner picks up the TestCafe config file by also specifying it in the saucectl yaml config:

testcafe:
version: 3.4.0
configFile: .testcaferc.js

Manually Setting the Request Proxy:​

Alternatively, you can apply the proxy settings as you make requests:

// HTTP_PROXY is pre-populated when using Sauce Connect
const items = process.env.HTTP_PROXY.split(':');
const host = items[1].replaceAll('/', '');
const port = items[2];
const response = await t.request({
url: `http://some-internal-resource.example.com/`,
method: 'get',
proxy: {
protocol: 'http',
host,
port,
}
});