Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A Playwright timeout and a skipped test are different outcomes. A timeout means some work exceeded its time budget; a skip means Playwright was instructed not to run the test or to stop it when a condition was met. First identify the exact status and diagnostic in the report, then adjust the timeout scope that actually expired—or correct the skip annotation or test filter. Increasing a timeout will not undo an intentional skip.

Timeout or skip? Identify what Playwright reported

Start with the result shown by the Playwright reporter and the associated error. A timeout usually identifies an operation or scope that ran out of time. A skipped result points instead to an annotation, a runtime condition, or test selection. A test that never appears to start may have been excluded before execution rather than timed out.

Report or symptom What it usually means Where to investigate
Timed out while running a test or hook The applicable test or fixture budget expired. The active test body, fixture setup, beforeEach, and configured timeout.
An assertion timed out An auto-retrying assertion exhausted its own budget. The assertion’s timeout, not just the test timeout.
A browser action or navigation timed out The operation’s own timeout setting expired. The specific call or action/navigation configuration.
Skipped, with or without a reason A skip annotation or conditional skip prevented further execution. The test and enclosing suites for skip annotations and predicates.
The test is absent from the run It may not have been selected. CLI filters, test-list options, and project selection.

The official Playwright documentation distinguishes these timeout scopes and skip behaviors; check the linked guide and API reference when interpreting a specific diagnostic: Timeouts and Test API.

Fix a test timeout by changing the budget that expired

Playwright Test’s documented default per-test timeout is 30,000 ms (30 seconds). It covers the test function, fixture setup, and beforeEach hooks. After the test body, fixture teardown and afterEach receive a separate timeout window of the same duration. That means slow setup can consume the test’s time before the test function has done much, while teardown is not simply added to the same test-body window. See Playwright’s timeout guide.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set a broader per-test timeout only when the test genuinely needs it

Configure a default in the Playwright Test configuration when a class of tests has a justified longer budget:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  timeout: 60_000,
});

Or change one test’s budget in that test:

import { test, expect } from '@playwright/test';

test('completes the longer workflow', async ({ page }) => {
  test.setTimeout(120_000);
  await page.goto('https://example.com');
  await expect(page.getByRole('heading')).toBeVisible();
});

Use a larger value to accommodate known work, not to hide an unbounded wait or a stuck application. A test-specific setting limits the blast radius compared with raising the default for every test.

Use test.slow() for an expected slow test

test.slow() marks a test as slow and triples its default timeout. It is appropriate when the test is predictably longer by design; it is not a repair for an accidental wait or a skipped result. See Playwright’s annotations guide.

test('exports a large report', async ({ page }) => {
  test.slow();
  // Perform the intentionally longer workflow.
});

Do not confuse a per-test limit with the whole-run limit

globalTimeout is a ceiling for the entire test run, not a replacement for the per-test timeout. It is disabled unless configured. Raising it will not make a single test’s individual budget longer. Use it when you need a suite-wide cap; use the test timeout when a test itself is expiring. The configuration options are documented in the TestConfig API.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Fix assertion, action, navigation, and fixture timeouts separately

Playwright has multiple clocks. The default expect timeout is 5,000 ms (5 seconds), and it is independent of the test timeout. The official timeouts guide describes the default action timeout as no timeout; action and navigation calls can still have their own configured or per-call limits. A fixture can also receive a separate budget. Diagnose the scope named in the error rather than inflating all of them together.

Scope What it bounds Documented default or appropriate adjustment
Test Test function, fixture setup, and beforeEach; teardown and afterEach have a separate same-value window. 30 seconds; configure timeout, use test.setTimeout(), or mark a genuinely slow test with test.slow().
Expect Auto-retrying locator assertions. 5 seconds; set expect.timeout or pass a timeout to the assertion.
Action/navigation A browser action or navigation operation. The guide describes no action timeout by default; adjust the specific operation or relevant use setting if a configured limit expired.
Fixture Fixture setup or teardown. A fixture can have its own timeout when it needs a different budget from the test.
Global run The entire test suite run. Disabled unless configured; set globalTimeout for a suite-wide ceiling.

When an assertion’s retry window expires

If the report names an assertion timeout, increase the assertion-specific budget or configure expect.timeout. For example:

await expect(page.getByRole('status')).toHaveText('Saved', {
  timeout: 10_000,
});

This gives that assertion more time to observe the expected state; it does not extend the overall test’s budget. The locator must still eventually match the intended state, so check the locator and application behavior before increasing the value.

When an action or navigation expires

Use the timeout setting for the action or navigation named in the diagnostic. For an individual navigation call, a per-call timeout can be made explicit:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
await page.goto('https://example.com', { timeout: 30_000 });

Configuration can also set relevant action or navigation defaults under use. The guide’s stated default for action timeout is no timeout, so do not assume that the test’s 30-second limit is the action’s limit. A test can still hit its own overall budget while waiting on work inside it.

When fixture setup is the slow part

Inspect fixture setup and teardown before making every test slower. Playwright supports a fixture-specific timeout, which lets a known slow fixture have a distinct budget. This is useful when shared setup—such as preparing a resource—is the expensive part, while individual tests should retain their normal limit. See the fixtures guide for fixture configuration and scope.

Why Playwright tests are skipped

A skipped result is not a timeout failure. test.skip() is an instruction to stop running a test when reached; a test declared skipped does not run. Search both the test and its enclosing describe blocks for annotations, then inspect any runtime condition and the reason displayed in the report.

Find unconditional and enclosing skips

Search for test.skip and test.describe.skip. An enclosing skipped group can account for several tests appearing as skipped even if their individual bodies contain no skip call. Remove an unintended annotation or change it to the behavior the test is meant to have.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Check conditional skips against the active project or environment

test.skip(condition, description) can skip based on runtime context. A browser-specific or environment-specific skip can be legitimate, but verify that the predicate matches the project actually running. Include a clear description so the report explains the decision:

test('uses a browser-specific feature', async ({ page, browserName }) => {
  test.skip(browserName !== 'chromium', 'This feature is only tested in Chromium');
  // Test the feature in the supported project.
});

If the condition is accidentally true for the project you intended to test, correct the predicate or the project configuration. Do not raise a timeout: the test is being skipped by logic, not running out of time. The Test API documents skip behavior.

Distinguish test.fixme() from a slow test

test.fixme() marks a test that is known to be failing and should not run while it is deferred. It is not a timeout extension. By contrast, test.slow() marks a test expected to take longer and triples its default timeout. Search for both when the reporter says skipped or the test does not execute, and use the annotation that reflects the actual intent. Details are in the annotations guide.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

If the test never starts, check selection and project filters

Timeout settings matter only after a test is selected to run. A test absent from the run may have been excluded by CLI grep or test-list filtering, or by project selection. Inspect the exact command and configuration, including any test-name pattern and project option, before changing timeout values. Playwright’s command-line documentation describes test selection options. If a test is selected but then reports skipped, move on to annotations and conditional predicates instead.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A practical troubleshooting order

  1. Read the exact status and diagnostic. Decide whether the report says timed out, skipped, or omits the test altogether.
  2. For a timeout, identify the active scope. Check whether the message points to a test, expect assertion, action/navigation call, fixture, or global run.
  3. Find the work that consumed the budget. For a test timeout, inspect the body, fixture setup, and beforeEach; for a fixture timeout, inspect that fixture; for an assertion, verify its locator and expected state.
  4. Change only the relevant budget. Use a per-test timeout, assertion timeout, operation timeout, fixture timeout, or global ceiling according to the diagnostic.
  5. For a skipped result, inspect annotations and conditions. Search the test and its enclosing suites for test.skip, test.describe.skip, and test.fixme; check what condition evaluated true and the reported reason.
  6. For a test that is absent, inspect selection. Verify CLI filters and selected projects before editing timeout configuration.

Or skip the browser setup

If you need a screenshot of a page involved in debugging, rather than a replacement for running or fixing the Playwright test, ScreenshotNeo can capture a URL with one request. Its clean-shot steps accept cookie or consent banners and remove 60+ known consent platforms, newsletter popups, and chat widgets before capture; those steps can each be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. An MCP server offers take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. This does not change Playwright timeout behavior or execute your tests.

Example cURL request (replace the placeholder with your API key):

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo API documentation for request options. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month with no card.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.