We used to not report fatal error and hang forever because worker
did not run any tests but also did not report any errors.
Also properly show stack-less errors.
This is a follow-up fix to microsoft/playwright#8385.
Testing options are limited right now, but this change was confirmed
with a client running on my physical machine and a LaunchServer running
in a Docker container.
Before this change, the har.spec.ts only passed when the client and
server were on the some filesystem.
microsoft/playwright#8450 will likely give us options to test this in an
automated way in the official CI suite.
This change ensure's the HAR file is saved at `recordHar.path` on the
client instead of the server.
NB: The goal was to make this change transparent to the user and NOT
introduce any new APIs. Namely, I want to leave the API open for
potential `context.har.start()` and `context.har.stop()`.
This does BREAK servers that expect the HAR to be at the `recordHar.path`
on the server, but I think that's OK since there haven't been reports
of missing HAR on client making me think not many users are getting
HAR with client and server on different hosts anyways.
Closes#8355
This makes `test.fail` tests considered as passing when they actually fail:
- Stop restarting the worker.
- Retry when it passes instead of a fail.
- Behaves similar to regular tests in a `describe.serial` suite.
Strict doesn't make sense in querySelectorAll, but it was in the protocol.
And we had a strict option in ElementHandle.waitForSelector but it
was not surfaced in the docs/api.
chore: migrate tracing to har
- `HarTracer` is used by both `HarRecorder` that implements
`recordHar` context option, and by tracing.
- We keep the `trace.network` format for now, so it is not
yet a valid har file, but it contains har entries.
Instead of filtering the whole trace file on export, we write
into separate trace file for each chunk. We also write a separate
trace.network file with all resources, because it is reused between
chunks.
This brings us towards `tracing.startFile()/stopFile()` api.