Playwright releases
and compatibility notes.

Changes to the core playwright-php/playwright library: its PHP API, bridge, compatibility, fixes, and upgrades.

v1.4.0 AUG 2026

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)
v1.3.1 AUG 2026

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)
v1.3.0 JUL 2026

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)