playwright
playwright copied to clipboard
[BUG] page.waitForResponse: response.text: Protocol error (Network.getResponseBody): (NS_ERROR_INVALID_CONTENT_ENCODING)
System info
- Playwright Version: 1.33.0
- Operating System: Windows 11
- Browser: Firefox (works with WebKit and chromium)
Source code
await page.routeFromHAR('test.har', { notFound: 'fallback', url: HAR_URL, update: HAR_UPDATE, }); await Promise.all([page.waitForLoadState(), page.goto('/')]); ....... await page.waitForResponse(async response => { const text = await response.text(); return text.includes('accessToken') && text.includes('refreshToken') && text.includes('user'); });
here is an extract of the har, of the impacted response: "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ { "name": "Date", "value": "Wed" }, { "name": "Date", "value": "31 Jan 2024 13:47:53 GMT" }, { "name": "Content-Type", "value": "application/json; charset=utf-8" }, { "name": "Vary", "value": "Accept-Encoding" }, { "name": "X-Powered-By", "value": "Express" }, { "name": "Access-Control-Allow-Origin", "value": "*" }, { "name": "Access-Control-Allow-Credentials", "value": "true" }, { "name": "Access-Control-Expose-Headers", "value": "Content-Disposition" }, { "name": "ETag", "value": "W/"12e8-QR9mR2QsWwob72j5OSbnt3cOsDY"" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "Via", "value": "1.1 google" }, { "name": "Content-Length", "value": "1779" } ], "content": { "size": -1, "mimeType": "application/json; charset=utf-8", "_file": "411f6647642c5b0a1bef68f93926e7b7770eb036.json" },
Steps Works fine with webkit and chromium. However, while it works fine with Firefox if HAR_UPDATE=true, it fails on the response.text() when using har (HAR_UPDATE=false)
Note that if I remove { "name": "Content-Encoding", "value": "gzip" },
from the response in har, test passes on all chromium, webkit AND firefox (even with HAR_UPDATE=false).
Any idea of what could be wrong ?
Expected
Pass
Actual
Error: page.waitForResponse: response.text: Protocol error (Network.getResponseBody): Component returned failure code: 0x804b001b (NS_ERROR_INVALID_CONTENT_ENCODING) [nsIStreamListener.onDataAvailable] convertString@chrome://juggler/content/NetworkObserver.js:932:13 getBase64EncodedResponse@chrome://juggler/content/NetworkObserver.js:841:18 getResponseBody@chrome://juggler/content/NetworkObserver.js:90:34 Network.getResponseBody@chrome://juggler/content/protocol/PageHandler.js:261:30 dispatch@chrome://juggler/content/protocol/Dispatcher.js:132:39 _dispatch@chrome://juggler/content/protocol/Dispatcher.js:69:36 receiveMessage@chrome://juggler/content/components/Juggler.js:118:20
We need to have a full repro to be able to act on this issue, please follow the BUG issue template to provide one.
I hoped that the issue might be known or that you would have an idea on the problem. I will try to make a repro then
I don't know how to provide a repro. I have a website running in local that calls a backend API. I record calls to backend in har. But, I cannot provide front nor back code :(
A basic repo with a server that serves one file that demonstrates the problem would suffice.
I finally found out some time to create a repro: ReproIssueFirefox.zip
Here are the results I get:
`npx playwright test
Running 3 tests using 3 workers
✓ 1 [chromium] › example.test.js:3:5 › Repro firefox issue (1.7s) ✓ 2 [webkit] › example.test.js:3:5 › Repro firefox issue (2.6s) ✘ 3 [firefox] › example.test.js:3:5 › Repro firefox issue (3.5s) before page load page loaded button clicked. waiting on response received response test: {"data":{"signin":{"accessToken":"ThisIsTheValueIwant"}}}
before page load page loaded button clicked. waiting on response received response test: {"data":{"signin":{"accessToken":"ThisIsTheValueIwant"}}}
before page load page loaded received response
- [firefox] › example.test.js:3:5 › Repro firefox issue ─────────────────────────────────────────
Error: page.waitForResponse: response.text: Protocol error (Network.getResponseBody): Component returned failure code: 0x804b001b (NS_ERROR_INVALID_CONTENT_ENCODING) [nsIStreamListener.onDataAvailable]
12 | page.getByRole('button', { name: 'Charger les utilisateurs', exact: true }).click(),
13 | console.log('button clicked. waiting on response');
> 14 | await page.waitForResponse(async response => {
| ^
15 | console.log('received response');
16 | const text = await response.text();
17 | console.log('test:', text);
at C:\xxxxxx\ReproIssueFirefox\tests\example.test.js:14:16
1 failed [firefox] › example.test.js:3:5 › Repro firefox issue ────────────────────────────────────────── 2 passed (17.1s)`
Investigation notes: we fulfill with { "name": "Content-Encoding", "value": "gzip" }
which makes firefox network observer try to decode json as gzip.
Hi @dgozman Any news ?