How to Debug E2E Tests Efficiently with Playwright

Debugging end-to-end tests can be time-consuming, but Playwright’s built-in tools make it much easier. In this article, you’ll learn how to leverage Playwright’s debugging features to quickly identify and fix issues in your tests, minimizing downtime and maximizing productivity. This guide will help you streamline the debugging process so you can get back to delivering features faster.

Why Efficient Debugging is Essential for E2E Testing

Efficient debugging is crucial in E2E testing because it directly impacts the development cycle and the speed at which issues are identified and resolved. In complex applications, E2E tests cover critical workflows, and when they fail, it can be challenging to pinpoint the exact problem. Without efficient debugging practices, test failures can lead to wasted time and productivity, as developers are forced to sift through long test logs or replicate issues manually.

In E2E testing, bugs can arise from various sources, including browser-specific behavior, network conditions, or timing issues. Delays in debugging and fixing these issues can slow down your entire release pipeline, especially in CI/CD environments where quick feedback is essential. Debugging efficiently ensures that your team can quickly identify and resolve test failures, reducing downtime and improving the reliability of your test suite. Moreover, it helps maintain confidence in automated testing by minimizing false positives and preventing minor issues from being overlooked.

When using Playwright, its built-in debugging features simplify this process, allowing you to quickly trace the cause of test failures without the hassle of manual troubleshooting.

Playwright’s Built-In Debugging Tools

Playwright offers several built-in tools that make debugging E2E tests much easier and more efficient. These tools help you identify issues quickly, visualize what’s happening during test execution, and provide detailed feedback to fix failing tests.

1. Debug Mode (PWDEBUG)

Playwright's PWDEBUG mode pauses your tests at each step, allowing you to inspect the browser state before moving on to the next action. This interactive mode lets you step through the test manually, making it easier to pinpoint exactly where and why a test is failing. To enable PWDEBUG, simply set it before running your test:


PWDEBUG=1 npx playwright test

This command opens the browser and pauses at each step, giving you control over the test flow.

2. Trace Viewer

Playwright’s Trace Viewer provides a detailed breakdown of each test, showing actions, DOM snapshots, and network requests for every step. The trace is recorded during the test execution, and you can open it later to analyze exactly what happened. It provides screenshots, timing details, and logs, helping you understand why a test may have failed. To generate a trace:


npx playwright show-trace trace.zip

3. Screenshots and Video Recording

Playwright allows you to capture screenshots and record videos during test execution. This is especially useful for catching visual bugs or analyzing dynamic content that behaves differently in different browsers or devices. You can configure Playwright to take a screenshot or video at any point during a test:


await page.screenshot({ path: 'example.png' });
await page.video().saveAs('test-video.mp4');

4. Verbose Logging

Verbose logging enables detailed logs of test execution. This is particularly helpful when tracking down issues related to network requests, timeouts, or element selectors. To enable verbose logs:


DEBUG=pw:api npx playwright test

By leveraging these tools, Playwright provides a comprehensive approach to debugging, ensuring that you can quickly diagnose and resolve issues in your E2E tests. These features help reduce time spent on troubleshooting and increase the overall reliability of your test suite.

Step-by-Step: Debugging a Test in Playwright

Step-by-Step: Debugging a Test in Playwright

To efficiently debug your Playwright E2E tests, follow this step-by-step process using Playwright’s debugging features.

1. Run the Test with PWDEBUG Mode

Start by running your test with PWDEBUG=1. This will pause the test execution at each step, allowing you to interact with the browser manually and inspect the state of the application.


PWDEBUG=1 npx playwright test

Use the paused state to inspect elements, check for missing components, or review network calls that may be causing test failures.

2. Examine the Trace Viewer

If you need to dive deeper into what happened during a test, enable trace generation during your test run. Once your test finishes, load the trace using the Trace Viewer.


npx playwright show-trace trace.zip

The Trace Viewer will show screenshots, DOM snapshots, and the timeline of actions, making it easier to pinpoint where things went wrong.

3. Enable Verbose Logs for Extra Detail

When a test fails, enabling verbose logging will provide detailed output of every action Playwright performs, helping you identify where timing issues or incorrect selectors are causing failures.


DEBUG=pw:api npx playwright test

This log will help you track network requests, identify failed assertions, or catch slow-loading elements.

4. Capture Screenshots or Videos

If the issue is visual (e.g., layout misalignments or missing elements), configure Playwright to take screenshots or record videos. These provide valuable insight into how the application behaves visually during test execution.


await page.screenshot({ path: 'error.png' });
await page.video().saveAs('test-video.mp4');

5. Re-run Test with Selective Changes

Once you’ve identified the issue, make small changes to your code and re-run the test in PWDEBUG mode. This allows you to confirm that your changes fix the problem without having to re-run the entire test suite.

By following these steps, you’ll be able to efficiently debug any issues that arise in your Playwright E2E tests, reducing the time spent on troubleshooting and improving test reliability.

Common Debugging Pitfalls and How to Avoid Them

Even with powerful tools, debugging can present certain challenges. Here are some common pitfalls you may encounter while debugging Playwright E2E tests and how to avoid them:

  1. Overlooking Test Isolation
    • When tests aren’t properly isolated, debugging becomes harder because shared state or interactions between tests can cause unpredictable behavior. Always ensure your tests are independent of one another using browser contexts to prevent state leakage.
    • Avoid running multiple tests within the same session, as this can lead to state pollution.
  2. Relying on Fixed Wait Times
    • Hardcoded wait times (sleep or setTimeout) are common but ineffective for handling asynchronous actions. Tests that pass today may fail tomorrow if page load times fluctuate.
    • Playwright offers automatic waits for elements to become available before interactions. Replace fixed waits with dynamic waits for better stability.
  3. Neglecting to Use Trace Viewer or Verbose Logs
    • Failing to use Playwright’s trace viewer or verbose logging can lead to longer debugging times, as you miss out on crucial details like DOM snapshots, network requests, and log data.
    • Always enable trace logs for complex test scenarios and use verbose logging to gather additional insights during test execution.
  4. Ignoring Browser-Specific Issues
    • If your tests only pass on one browser but fail on others, you may overlook browser-specific quirks. Cross-browser differences can be subtle but significant.
    • Ensure that your test suite runs across multiple browsers (Chrome, Firefox, WebKit) in parallel to catch browser-specific bugs early.
  5. Mismanaging Test Data
    • Poor test data management can lead to inconsistencies, especially if data is reused or improperly cleaned up between tests. This leads to flaky tests that are harder to debug.
    • Use fixtures and clean test data between tests to ensure consistency and avoid data-related failures.

By recognizing and addressing these common pitfalls, you can streamline the debugging process and reduce the occurrence of false positives or flaky tests in your Playwright setup.

Tips for Faster Debugging in Playwright

Speeding up the debugging process helps you quickly identify and fix issues, keeping your development workflow smooth and efficient. Here are some tips to help you debug faster when using Playwright:

1. Use Interactive Mode

Playwright’s interactive mode with PWDEBUG=1 pauses test execution and allows you to manually inspect the browser state at each step. This gives you immediate feedback without waiting for the entire test suite to run. It’s especially useful for debugging specific steps where the test is failing.

2. Leverage Selective Test Execution

Instead of running the entire test suite, focus on a specific test or subset of tests related to the problem. Use Playwright’s filtering capabilities to target specific tests using tags or file paths. This reduces the time spent rerunning unrelated tests.


npx playwright test --grep @login

3. Enable Fast Feedback with Headed Mode

When running tests in headed mode, Playwright opens a visible browser window, allowing you to see what happens in real-time. This is helpful for debugging visual or layout issues that may not be obvious from logs or screenshots alone.


npx playwright test --headed

4. Record and Replay Tests

Record the test execution with screenshots or videos to capture what happened during the test run. This can be invaluable when debugging intermittent or visually-related bugs.


await page.screenshot({ path: 'debug.png' });
await page.video().saveAs('debug-video.mp4');

5. Use Assertions to Catch Issues Early

Add more assertions throughout your test to ensure that the expected state of the application is met at key points. These checkpoints help you identify where things go wrong sooner rather than at the end of the test.

6. Review Trace Logs Regularly

Set up trace logs to track test execution step by step, reviewing network requests, DOM states, and element interactions. The trace viewer provides a granular look at the test, reducing guesswork and allowing you to spot issues immediately.

7. Run Tests in Headless Mode for Speed

When debugging issues unrelated to visuals, running tests in headless mode speeds up test execution, allowing you to reproduce and debug failures faster in CI environments.

By using these debugging techniques, you can identify and resolve test failures more quickly, making your Playwright E2E testing workflow more efficient.

What to Read About Debugging E2E Tests with Playwright

  1. Playwright Official Documentation - Debugging Tools
    https://playwright.dev/docs/debug
    Playwright's official guide to using PWDEBUG, the Trace Viewer, and other debugging tools to streamline your test debugging process.
  2. Using Playwright's Trace Viewer
    https://playwright.dev/docs/trace-viewer
    A comprehensive overview of how to record and view traces for your Playwright tests, helping you debug failed tests more effectively.
  3. Efficient Debugging with Playwright
    https://www.browserstack.com/guide/debugging-playwright-tests
    An in-depth guide from BrowserStack on debugging Playwright tests, focusing on common issues and tools to make debugging faster and more efficient.
  4. Troubleshooting with Playwright and Visual Studio Code
    https://playwright.dev/docs/debug-with-vscode
    Learn how to use Playwright with Visual Studio Code for a smooth debugging experience, including step-by-step instructions on setting breakpoints and running tests interactively.

These resources will help you dive deeper into effective debugging strategies and tools, making it easier to resolve issues quickly in your Playwright E2E tests.

Leave a Reply

Your email address will not be published. Required fields are marked *