PackageTrack
Sign in Get early access

playwright-php/playwright

Modern PHP library for Playwright automation: browsing, scraping, screenshots, testing, and more.

v1.4.0 97K downloads/mo #4065 most downloaded on Packagist playwright-php/playwright

What this package is like to depend on

Last release 13 days ago

10 Aug 2026

Release timing varies

gaps range from 1 weeks to 5 months

Nearly every release is documented

notes for 6 of 6 stable releases

Nothing withdrawn

no release was ever pulled

9 months old

6 releases · first in 2025

6 releases in the last 12 months

see the full history below

Release timeline

6 releases · Nov 2025 to Aug 2026
2026
Release Pre-release

Releases

latest 6
  1. v1.4.0 10 Aug 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v1.3.1...v1.4.0

    Open source →
    Release notes

    Added

    • BrowserInterface::browserType() and BrowserContextInterface::browser() (#133)
    • Public interface declarations for existing clock, input and response APIs (#136)
    • Console message page and timestamp metadata (#140)
    • Context headers and default timeouts (#141)
    • Locator actions, ARIA snapshots and bounding boxes (#142)
    • Locator assertions for DOM state and values (#139)
    • Page init scripts, drag and drop, and headers (#138)
    • Frame navigation, evaluation and titles (#143)
    • Accessible text and ARIA snapshot assertions (#146)
    • Console/error inspection, request waiting, media emulation, GC and touchscreen APIs (#147)
    • Evaluation handles and waitForFunction() (#148)
    • Web storage, virtual credentials and screencast controls (#149)
    • Network metadata and error/WebSocket accessors (#150)
    • Page clocks, ARIA snapshots, video access and locator file drops (#151)
    • BrowserInterface::bind() and unbind() (#152)
    • HAR recording and API request tracing (#153)
    • expect()->toBeAttached() (#154)

    Changed

    • Shared auto-waiting and tracing for expect() assertions (#154)

    Fixed

    • expect()->toHaveClass() matches the class attribute exactly (#137)
    • expect()->toBeEmpty() evaluates input values and text content in the DOM (#154)
    • expect()->not() applies to one assertion instead of leaking to later assertions on the same object (#154)
    Open source →
  2. v1.3.1 04 Aug 2026
    Release notes

    What's Changed

    Full Changelog: v1.3.0...v1.3.1

    Open source →
    Release notes

    Fixed

    • Locator::setInputFiles() and Page::setInputFiles() resolve relative paths before sending them to the Node bridge (#127)
    • Endpoint credentials are redacted from the connect() and connectOverCDP() logs (#128)
    Open source →
  3. v1.3.0 25 Jul 2026
    Release notes

    What's Changed

    • Make PageInterface::waitForSelector match implementation by @stloyd in #74
    • doc: fix example script location by @gimler in #77
    • Make PlaywrightConfig mandatory by @stloyd in #72
    • Align Page getBy* locators with Playwrights JS API by @braydend in #76
    • Support PSR Log 2.0 in addition to 3.0 by @jakubtobiasz in #93
    • ci: use playwright-install --with-deps to fix local execution by @gimler in #86
    • bug: pass options to waitForActionable to override timeout by @gimler in #82
    • feature: clear cookies by name by @gimler in #85
    • bug: implement missing bringToFront function by @gyaaniguy in #89
    • feature: add waitForFunction by @gimler in #87
    • chore: update docs by @raffaelecarelle in #97
    • Fix ProcessJsonRpcClient never clearing the Process output buffers by @poman in #103
    • Fix LspFraming permanently poisoning the stream on stray non-LSP output by @poman in #106
    • Fix passive popup/tab registration in the Node bridge server by @poman in #104
    • Add issue templates and contact links by @smnandre in #115
    • Align interfaces with the shipped public API by @smnandre in #108
    • Register page default timeout actions server-side (fix #94) by @smnandre in #109
    • Remove setAccessible calls, no-ops since PHP 8.1 by @smnandre in #117
    • Shut down the Node bridge when its parent dies by @smnandre in #118
    • Let operation timeouts extend the RPC deadline (fix #92) by @smnandre in #113
    • Unify tracing on PW_TRACE and wire config tracing (fix #79) by @smnandre in #111
    • Send unroute to the page instead of the context (fix #96) by @smnandre in #110
    • Transport request bodies as base64 postDataBuffer by @smnandre in #116
    • Register context.setStorageState on the server (fix #98) by @smnandre in #112
    • Implement Tracing API & record expect assertions as trace groups by @smnandre in #114
    • Add the missing v1.2.0 changelog entry by @smnandre in #119
    • Keep node resolution out of the unit test suite by @smnandre in #120
    • Wire config options into launch and context creation by @smnandre in #121
    • Prepare release 1.3.0 by @smnandre in #122

    New Contributors

    Full Changelog: v1.2.0...v1.3.0

    Open source →
    Release notes

    Added

    • Page::waitForFunction() (#87)
    • Clear cookies by name (#85)
    • BrowserContextInterface::tracing() exposing the Tracing API; expect() assertions are recorded as named trace groups (#114)
    • BrowserBuilder::withChannel(), withProxy() and withDownloadsPath() (#121)
    • PSR Log 2.0 support, alongside 3.0 (#93)
    • Interface @method annotations for methods already shipped by the concrete classes: BrowserContext::clock(), BrowserContext::setGeolocation(), BrowserContext::setOffline(), Dialog::page(), Keyboard::insertText(), Page::pause(), Response::headerValue(). They move to real interface declarations in the next major (#108)

    Changed

    • PlaywrightConfig is now mandatory on the Browser, BrowserContext, Page and BrowserBuilder constructors (#72)
    • Page::getBy*() locators accept string|Regex, matching the Playwright JS API (#76)
    • PW_TRACE is the single tracing switch; contexts created from PlaywrightConfigBuilder::fromEnv() record a trace saved on close (#111)
    • PlaywrightConfig applies channel, proxy, downloadsDir, videosDir and minNodeVersion; videosDir also applies to the default context (#121)

    Fixed

    • PageInterface::waitForSelector() returns LocatorInterface instead of ?LocatorInterface, matching the implementation (#74)
    • Page::bringToFront() is implemented (#89)
    • Page::unroute() reaches the page instead of the context (#110)
    • Page::setDefaultTimeout() and setDefaultNavigationTimeout() are registered server-side (#109)
    • BrowserContext::setStorageState() is registered server-side (#112)
    • Operation timeouts extend the RPC deadline (#113)
    • Request bodies survive non-UTF8 content, carried as base64 postDataBuffer (#116)
    • The Node bridge and its browser shut down when the PHP process dies (#118)
    • LspFraming recovers from stray non-LSP output on the stream (#106)
    • ProcessJsonRpcClient clears the Process output buffers (#103)
    • Passive popup and tab registration in the Node bridge (#104)
    • waitForActionable honours the options passed to override the timeout (#82)
    • Proxy credentials are redacted from the "Launching browser" log (#121)
    Open source →
  4. v1.2.0 25 Feb 2026
    Release notes

    What's Changed

    • Add support for PLAYWRIGHT_BROWSERS_PATH by @smnandre in #71
    • Add documentation for connecting to external browsers by @smnandre in #70
    • Fix $page->waitForLoadState() handling by @stloyd in #65
    • Adjust required PHPUnit requirements and CI setup by @stloyd in #68
    • Simplify ScreenshotHelper::slugifyUrl() by @stloyd in #69
    • Cookie expire date can be integer or float by @stloyd in #67

    New Contributors

    Full Changelog: v1.1.0...v1.1.1

    Open source →
    Release notes

    Added

    • PLAYWRIGHT_BROWSERS_PATH is read by PlaywrightConfigBuilder::fromEnv() and forwarded to the Node.js server, so a shared browser installation can be reused instead of a per-project one (#71)

    Fixed

    • Page::waitForLoadState() no longer fails with Unknown action: the action was never registered in the Node bridge (#65)
    • Cookie expiry accepts an integer or a float timestamp (#67)
    Open source →
  5. v1.1.0 23 Dec 2025
    Release notes

    What's Changed

    • Add support for PDF generation by @smnandre in #54
    • Implement Stringable in Frame, FrameLocator, Locator, and SelectorChain by @smnandre in #55
    • Decouple Excpect from PHPUnit / maintain compatibility by @smnandre in #57
    • Add Options classes (Page, Locator, Selector, Tracing, Websocket, ...) by @smnandre in #56
    • [CI] Add PHP 8.5 to matrix by @smnandre in #58
    • Fix Clock implementation by @smnandre in #59

    Full Changelog: v1.0.0...v1.1.0

    Open source →
    Release notes

    Added

    • PDF generation support via Page::pdf()
    • Typed Options classes (e.g., ClickOptions, PdfOptions)
    • Frame, Locator and Selector implements Stringable
    Open source →
  6. v1.0.0 08 Nov 2025
    Release notes

    Added

    • Initial stable release of Playwright PHP
    • Cross-browser support (Chromium, Firefox, WebKit)
    • PHPUnit integration with fluent assertions
    • Auto-waiting locators and interactions
    • Screenshot and tracing capabilities
    • Storage state management

    Changed

    • Marked package as stable (removed experimental warning)
    • Added PHPUnit 10+ requirement documentation for testing trait
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive