v1.48.0
WebSocket routing
New methods page.route_web_socket() and browser_context.route_web_socket() allow to intercept, modify and mock WebSocket connections initiated in the page. Below is a simple example that mocks WebSocket communication by responding to a "request" with a "response".
def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
  if message == "request":
    ws.send("response")
page.route_web_socket("/ws", lambda ws: ws.on_message(
    lambda message: message_handler(ws, message)
))See WebSocketRoute for more details.
UI updates
- New "copy" buttons for annotations and test location in the HTML report.
 - Route method calls like route.fulfill() are not shown in the report and trace viewer anymore. You can see which network requests were routed in the network tab instead.
 - New "Copy as cURL" and "Copy as fetch" buttons for requests in the network tab.
 
Miscellaneous
- New method page.request_gc() may help detect memory leaks.
 - Requests made by APIRequestContext now record detailed timing and security information in the HAR.
 - This version adds support for Python 3.13
 - This version is the last version supporting Python 3.8
 
Browser Versions
- Chromium 130.0.6723.19
 - Mozilla Firefox 130.0
 - WebKit 18.0
 
This version was also tested against the following stable channels:
- Google Chrome 129
 - Microsoft Edge 129