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 2026Releases
latest 6-
v1.4.010 Aug 2026Release notes
Open source →What's Changed
- Standardize on bin/.gitignore for bin/ artifacts by @kbond in #131
- Enforce $this-> for PHPUnit assertion calls by @smnandre in #132
- Declare interface methods instead of annotating them by @smnandre in #136
- Match the class attribute exactly in toHaveClass by @smnandre in #137
- Add internal navigation redirect handling by @smnandre in #135
- Merge splitted unit tests into one by @smnandre in #134
- Add browser type and context browser by @smnandre in #133
- Add console message metadata by @smnandre in #140
- Add browser context timeouts and extra headers by @smnandre in #141
- Add direct locator APIs by @smnandre in #142
- Add DOM locator assertions by @smnandre in #139
- Add page init scripts, drag and drop and headers by @smnandre in #138
- Add frame evaluation and title by @smnandre in #143
- Cover the parity additions left untested by @smnandre in #144
- Add accessible text and ARIA snapshot assertions by @smnandre in #146
- Consolidate assertion implementations by @smnandre in #154
- Add frame navigation and evaluation by @smnandre in #145
- Add observability features by @smnandre in #147
- Add evaluation parity by @smnandre in #148
- Add WebStorage, Credentials and Screencast support by @smnandre in #149
- Add Network parity by @smnandre in #150
- Add surface parity by @smnandre in #151
- Add Browser bind and unbind by @smnandre in #152
- Add HAR recording & API tracing by @smnandre in #153
- Add missing runtime resource docblocks by @smnandre in #156
- Add missing core API docblocks by @smnandre in #155
New Contributors
Full Changelog: v1.3.1...v1.4.0
Release notes
Open source →Added
BrowserInterface::browserType()andBrowserContextInterface::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()andunbind()(#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)
-
v1.3.104 Aug 2026Release notes
Open source →What's Changed
- Resolve input file paths before sending by @smnandre in #127
- Redact credentials from connect logs by @smnandre in #128
Full Changelog: v1.3.0...v1.3.1
Release notes
Open source →Fixed
Locator::setInputFiles()andPage::setInputFiles()resolve relative paths before sending them to the Node bridge (#127)- Endpoint credentials are redacted from the
connect()andconnectOverCDP()logs (#128)
-
v1.3.025 Jul 2026Release notes
Open source →What's Changed
- Make
PageInterface::waitForSelectormatch implementation by @stloyd in #74 - doc: fix example script location by @gimler in #77
- Make
PlaywrightConfigmandatory 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
- @gimler made their first contribution in #77
- @braydend made their first contribution in #76
- @jakubtobiasz made their first contribution in #93
- @gyaaniguy made their first contribution in #89
- @raffaelecarelle made their first contribution in #97
- @poman made their first contribution in #103
Full Changelog: v1.2.0...v1.3.0
Release notes
Open source →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()andwithDownloadsPath()(#121)- PSR Log 2.0 support, alongside 3.0 (#93)
- Interface
@methodannotations 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
PlaywrightConfigis now mandatory on theBrowser,BrowserContext,PageandBrowserBuilderconstructors (#72)Page::getBy*()locators acceptstring|Regex, matching the Playwright JS API (#76)PW_TRACEis the single tracing switch; contexts created fromPlaywrightConfigBuilder::fromEnv()record a trace saved on close (#111)PlaywrightConfigapplieschannel,proxy,downloadsDir,videosDirandminNodeVersion;videosDiralso applies to the default context (#121)
Fixed
PageInterface::waitForSelector()returnsLocatorInterfaceinstead of?LocatorInterface, matching the implementation (#74)Page::bringToFront()is implemented (#89)Page::unroute()reaches the page instead of the context (#110)Page::setDefaultTimeout()andsetDefaultNavigationTimeout()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)
LspFramingrecovers from stray non-LSP output on the stream (#106)ProcessJsonRpcClientclears the Process output buffers (#103)- Passive popup and tab registration in the Node bridge (#104)
waitForActionablehonours the options passed to override the timeout (#82)- Proxy credentials are redacted from the "Launching browser" log (#121)
- Make
-
v1.2.025 Feb 2026Release notes
Open source →What's Changed
- Add support for
PLAYWRIGHT_BROWSERS_PATHby @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
Release notes
Open source →Added
PLAYWRIGHT_BROWSERS_PATHis read byPlaywrightConfigBuilder::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 withUnknown action: the action was never registered in the Node bridge (#65)- Cookie expiry accepts an integer or a float timestamp (#67)
- Add support for
-
v1.1.023 Dec 2025Release notes
Open source →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
Release notes
Open source →Added
- PDF generation support via
Page::pdf() - Typed
Optionsclasses (e.g.,ClickOptions,PdfOptions) - Frame, Locator and Selector implements
Stringable
-
v1.0.008 Nov 2025Release notes
Open source →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