mrkeyoor.com_
Tue 01 Sept 17:05 UTC
Dev Toolsevaluationupdated 26 Aug 2026

playwright review

Playwright is a browser automation framework for testing websites and scripting Chromium, Firefox, and WebKit through one API. It solves the costly problem of maintaining separate browser drivers while adding a test runner, automatic waiting, traces, and isolated browser sessions.

+301stars / 7d
Verdict

Our Playwright checkout installed 613 packages and built in 34 seconds total, but its repository test run ended with 202 failures and 14,800 tests unrun. Use the published package for serious cross-browser application testing: its isolation, locators, traces, and three-engine API are hard to match in one project. Contributors should expect a large monorepo and a much more demanding validation path than application users face.

We ran it

Lab card: what happened when we ran playwrightScreenshot of playwright (playwright.dev)
Install✓ · 19s613 packages · 438 MB
Build✓ · 15s
Tests✗ · 216sran, no count parsed
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo3092 files~642,767 lines of source · 68.4 MB · 20 CI workflows · tests dir

Answers from our run

Does playwright build from source?

Dependencies installed in 19 seconds (613 packages), and the build succeeded in 15 seconds. We cloned commit 5a52607 into a clean Debian container with 3 CPUs and no project-specific setup.

Do playwright's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does playwright have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use playwright?

Teams whose browser matrix must include real Safari or mobile Safari: Playwright runs its patched WebKit build, and its device profiles emulate phones rather than operating physical devices.

What are the alternatives to playwright?

Cypress, Selenium, Puppeteer. Our Playwright checkout installed 613 packages and built in 34 seconds total, but its repository test run ended with 202 failures and 14,800 tests unrun.

Setup4/5Fast package start; browsers and Linux libraries add weight
Docs5/5Detailed guides for tests, APIs, CI, traces, and browsers
Community5/5Daily code and issue activity across a very large user base
Maturity5/5Established runner, clients, releases, and three browser engines

Discussed on

  1. hnPlaywright: Automate Chromium, WebKit and Firefox383 points
  2. hnShow HN: Playwright Skill for Claude Code – Less context than playwright-MCP189 points
  3. hnPlaywright Tools for MCP181 points
  4. hnPlaywright for .NET is now stable155 points
  5. hnPlaywright CLI – Open/inspect/emulate pages, generate screenshots, record users134 points

Who it’s for

Web teams that need end-to-end tests across Chromium, Firefox, and WebKit.
Developers who want browser automation for screenshots, PDFs, scraping, or repeatable form workflows.
CI owners who need traces, retries, parallel workers, and isolated browser state when a test fails.
TypeScript or JavaScript teams that want the deepest integration, while Python, Java, and .NET users can use separate official clients.

Who it’s NOT for

Teams whose browser matrix must include real Safari or mobile Safari: Playwright runs its patched WebKit build, and its device profiles emulate phones rather than operating physical devices.
Projects that depend on browser extensions in Firefox or WebKit: the documentation limits extension testing to Chromium with a persistent context.
Developers seeking a small dependency footprint for occasional HTML parsing: our install pulled 613 packages and occupied 438 MB before browser binaries entered the discussion.
Maintainers expecting the repository's own full suite to be a quick confidence check: our run lasted 216 seconds, reported 202 failures, and left 14,800 tests unrun after an interruption.

Setup reality

Our sandbox installed 613 npm packages in 19 seconds and used 438 MB, then built the monorepo in 15 seconds. The test command failed after 216 seconds: 2 tests passed, 202 failed, 1 was interrupted, and 14,800 did not run. The log only says the run was interrupted during browser-context HAR tests, so it does not establish a cause. The npm audit found 0 known vulnerabilities.

Using the published test package is easier than building the 3,092-file repository. A normal project still downloads browser binaries and may need Linux system dependencies, while authenticated tests need saved browser state or application credentials. CI users must budget storage for traces, screenshots, and videos. Extension work is Chromium-only, and device profiles do not replace checks on physical phones or Apple's Safari browser.

Three browser engines share one test model

Playwright gives application teams one API for Chromium, Firefox, and WebKit. Its test runner adds parallel execution, retries, projects, fixtures, reports, and browser isolation. The library can also run ordinary automation scripts for screenshots, PDFs, scraping, and form work. That range is useful because the same locator and browser-context concepts carry from a small script into a CI suite. Official clients also exist for Python, Java, and .NET, though the repository and first-class runner experience center on TypeScript and JavaScript.

The browser coverage needs precise wording. WebKit gives developers useful coverage of the engine behind Safari, but it is a patched build supplied by Playwright, not the Safari application. Device descriptors reproduce viewport, user agent, touch, and related settings; they do not turn a Linux runner into an iPhone. Teams shipping camera, Bluetooth, extension, codec, or operating-system integrations still need physical-device and vendor-browser checks. Selenium remains the clearer choice when a real Safari session through WebDriver is a fixed requirement.

Locators and traces cut the usual test-debugging waste

Playwright's strongest design choice is to make waiting part of the interaction model. A locator can target a button by role and accessible name, then wait until the element is actionable. Assertions retry until their condition succeeds or times out. This removes much of the hand-written sleep and polling code that makes browser suites slow and erratic. Browser contexts give each test fresh cookies, local storage, and session state without launching another whole browser process.

Failure evidence is unusually good. A trace can retain actions, DOM snapshots, console output, and network activity, then open in the Trace Viewer after CI has finished. Screenshots and video are configurable too. These tools do consume storage, especially across retries and multiple projects, so retention belongs in the CI design. The benefit is concrete: a developer can inspect the page around the failing action instead of reproducing a one-off timeout from a text stack trace.

What happened when we ran it

Our run installed 613 packages in 19 seconds, consuming 438 MB on disk, and the build completed in 15 seconds. The checkout contained 3,092 files and about 642,767 lines of source, which explains why contributing to the framework is a different proposition from adding @playwright/test to an application. The npm audit reported 0 known vulnerabilities at every listed severity.

The tests failed after 216 seconds. The summary recorded 2 passes, 202 failures, 1 interrupted test, and 14,800 tests that did not run. The last output named browser-context HAR cases and said the test was interrupted; it also reported one error outside any test. That log does not identify why the interruption happened, so blaming a missing package, a browser defect, or the unprivileged container would be guesswork. The defensible conclusion is that this repository's full suite did not pass in our fresh Node sandbox.

There are 20 CI workflow files and a tests directory, which supports the picture of a heavily exercised project. There is no Dockerfile in the repository. Application users get a simpler route through the initializer and documented CI images, while contributors need the monorepo workspaces, generated browser builds, and the project's own test infrastructure.

The convenient API still exposes real browser costs

A basic test is short: open a page, find an element by role or label, act, and assert. Production suites have harder work around authentication, test data, third-party services, downloads, and parallel account use. Saved storage state avoids logging in before every test, but that state becomes a credential that must stay out of source control. Network mocking can isolate dependencies; excessive mocking can also hide the integration failures an end-to-end suite exists to find.

Browser binaries and Linux libraries are another operational cost. Playwright can install both through its commands, yet a minimal container grows once Chromium, Firefox, and WebKit arrive. Teams should pin Playwright and its matching browser revisions, cache downloads carefully, and use the supplied CI guidance. Running every browser on every pull request may be unnecessary. A common split is one fast project on each change and the 3-engine matrix before merge or release.

Active maintenance matches the project's reach

The repository was pushed on 2026-08-26, and the latest release was v1.62.1 on 2026-07-30. The current open count is 179 issues and pull requests combined. Items updated on August 25 and 26 covered Chromium launch behavior, Android WebView process matching, trace rendering, video bitrate, documentation, and MCP work. That mixture shows current maintenance across browsers and tools rather than a queue built around one neglected subsystem.

The documentation is broad and task-oriented. It covers the test runner, library use, CI, locators, traces, authentication, emulation, network controls, extensions, and language clients. The top-level README now also routes agent users toward a separate CLI and MCP server. That expansion can make the product family look busier than it needs to be, but the boundaries are understandable: Playwright Test is for test suites, the library is for scripts, the CLI is shaped for coding agents, and the MCP server exposes browser tools to model clients.

Choose it for cross-browser confidence, not a tiny install

Playwright is the default recommendation for a new TypeScript end-to-end suite when Chromium-only testing is too narrow. Its role-based locators reward accessible markup, contexts isolate tests cheaply, and traces make CI failures much less opaque. The Apache 2.0 license and frequent releases also fit company use without unusual legal work.

The trade is size and moving parts. Our 438 MB dependency install preceded browser downloads, and the framework repository's 14,800 unrun tests show how large its own validation surface has become. Small scripts that only drive Chrome may be happier with Puppeteer. Teams committed to WebDriver infrastructure or genuine Safari sessions should keep Selenium. For most web product teams that want one modern runner across three engines, Playwright remains the best place to start.

Alternatives

ProjectWhat it isPick it when
Cypress gh↗A browser-first test runner with an interactive debugging workflow.pick this instead when your team values an in-browser test UI and primarily targets Chromium-family browsers and Firefox.
Selenium gh↗The long-established WebDriver project with broad language and browser support.pick this instead when standards-based remote WebDriver, real Safari, or an existing Selenium Grid matters most.
Puppeteer gh↗A focused JavaScript API for automating Chrome and Firefox.pick this instead when you need a smaller browser scripting library and do not want Playwright Test's runner and cross-engine scope.

What people are saying

  1. [velocity-scout] microsoft/playwright

Sources

  1. Playwright README
  2. Playwright repository
  3. Playwright v1.62.1 release
  4. Current Playwright issues and pull requests

More dev tools reviews

workmux · v2rayNG · SecLists · hashcat · eslint · fastfetch · the whole board →