javascript 如何使用Playwright保存请求的响应体?

ztmd8pv5  于 2023-03-21  发布在  Java
关注(0)|答案(4)|浏览(282)

我需要拦截网络请求并将其响应体保存到变量中,这样我就可以使用显示在UI上的值执行Assert,但是当我试图访问应该包含保存的响应体的变量时,我收到的是[object Object]而不是有效的主体。
stringify也不能解决这个问题,因为变量变成了{"_type":"Page","_guid":"page@"},而不是实际的响应。
下面是代码:

const resp = await page.on('response', async response => {
            if (response.url().includes('/some_url/') && response.status() === 200) {
                console.log('BODY() ' + (await response.body())); //logs valid JSON response body
                return await response.body();
            }
        })
        console.log('RESPONSE' + resp); //logs RESPONSE[object Object]
vql8enpb

vql8enpb1#

我将使用waitForResponse,它将返回与 predicate 匹配的response。 predicate 应该返回truefalse。一旦,然后您评估响应:

const response = await page.waitForResponse(response => response.url().includes('/some_url/') && response.status() === 200);
console.log('RESPONSE ' + (await response.body()));
t30tvxxf

t30tvxxf2#

我问这个问题已经快一年了。还有另一种方法可以使用异步 predicate 函数保存响应(对于只有一个端点的graphql尤其有用)

const [response] = await Promise.all([
        page.waitForResponse(async response => {
            const text = await response.text();
            return text.includes(`some response text, that we need to intercept`);
        })
    ]);
    return response.json();

https://github.com/microsoft/playwright/issues/4535

h7appiyu

h7appiyu3#

page.on设置一个'response'类型的事件,由箭头函数处理,该箭头函数从第一行开始设置:async response => {... .
当我们设置这样一个事件时,我们会得到输出,但输出不是响应本身。如果你想打印整个响应,你应该在返回之前在箭头函数中执行:

...
    console.log(JSON.stringify(response);
    return await response.body();

Nit:不需要在返回时使用await,最后一行可以重写为:

return response.body();
edqdpe6u

edqdpe6u4#

如何在C#中使用Playwright保存请求的响应体?

我在下面尝试获取响应体,但没有得到它。我必须在后面的代码中使用body进行Assert:

_page.Response += (_, responseContent) => Console.WriteLine(responseContent.JsonAsync() + "-----" + responseContent.Url);

请帮帮忙

相关问题