I have an E2E suite that has some long and short tests based on duration. So I have configured a elapsed timeout for each. This timeout is based on a normal run time with an added contingency for possible API retries or page retries to give the test the benefit of the doubt. What I would like to do is have a way to assert that the elapsed timeout is still operating in designated threshold. So, can I after each test assert the timeout is still valid? This could alert us when we might have some drift based on test data or data indexing that could be shifting to slower runs. Maybe someone has a better solution, happy to discuss. Just thought it might be easier to have the test tell me that it has drifted form our designated thresholds. I know the elapsed time is reportable but wondering how I can access it, Thanks!
This thread is trying to answer question "Can I assert the validity of the elapsed timeout for each test in an E2E suite and how can I access the elapsed time report?"
Related Ask AI answer for "How do I set and validate timeouts for each test in an end-to-end suite using Playwright Test?".
Sure, you can validate the elapsed timeout for each test in your e2e suite with @playwright/test. It offers configurable timeouts for different tasks, including test timeouts. By default, the test timeout is 30 seconds.
You can use the test.setTimeout()
function to set a custom timeout for a single test or modify the timeout within hooks like beforeAll
and afterAll
.
Here's how you can extend the timeout for all tests running within a specific hook by 30 seconds:
import { test } from '@playwright/test';
test.beforeEach(async ({}, testInfo) => {
// Extend timeout for all tests running this hook by 30 seconds.
testInfo.setTimeout(testInfo.timeout + 30000);
});
And here's how you can change the timeout specifically for a beforeAll
or afterAll
hook:
import { test } from '@playwright/test';
test.beforeAll(async () => {
// Set custom timeout for this beforeAll hook.
test.setTimeout(60000);
});
Remember, assertion timeouts are separate from overall e2e suite timeouts. Assertion timeouts are related to web-first assertions like expect(locator).toHaveText()
, which have their own default value of 5 seconds but can be customized in the Playwright Test configuration file (playwright.config.ts
).
To set a global timeout for the entire test run, you can define it in the playwright.config.ts
file using defineConfig
. For example, you can set a global timeout of one hour (3600 seconds) as follows:
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 3600000, // One hour in milliseconds
});
By modifying these timeouts and asserting their validity using appropriate conditions or assertions provided by your testing framework (such as Jest's expect), you can ensure that each individual e2e test adheres to its specified timeout duration.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email [email protected].