## TL;DR

The socket usually closes because the page navigated or the test ended before the message arrived. Await the expected message with a promise before finishing the test, and listen for the close event to log why it closed.

## The query

```text
playwright websocket closed before test finished: how to fix
```

## Use this when

- websocket closes mid-test
- socket messages never arrive
- live-update tests flake

## Not for

- the server closing idle sockets
- testing the server's socket logic
- socket auth failures

## Steps

1. Add a websocket handler that logs 'close' with its code and reason. Expected output: log lines showing when and why the socket closed.
2. Check whether the test navigates or closes the page before awaiting the socket message. Expected output: the close logged before the message wait resolves.
3. Restructure to await the message first: create the message promise before the triggering click. Expected output: the message promise is created before the trigger.
4. Keep the page open until assertions on the message complete; move teardown after them. Expected output: assertions run while the socket is still open.
5. Re-run and confirm the message arrives before any close. Expected output: the message log precedes the close log.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_YhWLSETF9z4EkXd4pOe4jw
