diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index ed487e77d2..2a4a6caee5 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -214,8 +214,16 @@ export abstract class APIRequestContext extends SdkObject { }); const fetchUid = this._storeResponseBody(fetchResponse.body); this.fetchLog.set(fetchUid, controller.metadata.log); - if (params.failOnStatusCode && (fetchResponse.status < 200 || fetchResponse.status >= 400)) - throw new Error(`${fetchResponse.status} ${fetchResponse.statusText}`); + if (params.failOnStatusCode && (fetchResponse.status < 200 || fetchResponse.status >= 400)) { + let responseText = ''; + if (fetchResponse.body.byteLength) { + let text = fetchResponse.body.toString('utf8'); + if (text.length > 1000) + text = text.substring(0, 997) + '...'; + responseText = `\nResponse text:\n${text}`; + } + throw new Error(`${fetchResponse.status} ${fetchResponse.statusText}${responseText}`); + } return { ...fetchResponse, fetchUid }; } diff --git a/tests/library/browsercontext-fetch.spec.ts b/tests/library/browsercontext-fetch.spec.ts index bffb1b82f1..733596b481 100644 --- a/tests/library/browsercontext-fetch.spec.ts +++ b/tests/library/browsercontext-fetch.spec.ts @@ -145,6 +145,8 @@ for (const method of ['fetch', 'delete', 'get', 'head', 'patch', 'post', 'put'] failOnStatusCode: true }).catch(e => e); expect(error.message).toContain('404 Not Found'); + if (method !== 'head') + expect(error.message).toContain('Response text:\nFile not found:'); }); it(`${method}should support ignoreHTTPSErrors option`, async ({ context, httpsServer }) => {