我需要拦截网络请求并将其响应体保存到变量中,这样我就可以使用显示在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]
4条答案
按热度按时间vql8enpb1#
我将使用
waitForResponse
,它将返回与 predicate 匹配的response
。 predicate 应该返回true
或false
。一旦,然后您评估响应:t30tvxxf2#
我问这个问题已经快一年了。还有另一种方法可以使用异步 predicate 函数保存响应(对于只有一个端点的graphql尤其有用)
https://github.com/microsoft/playwright/issues/4535
h7appiyu3#
page.on
设置一个'response'
类型的事件,由箭头函数处理,该箭头函数从第一行开始设置:async response => {...
.当我们设置这样一个事件时,我们会得到输出,但输出不是响应本身。如果你想打印整个响应,你应该在返回之前在箭头函数中执行:
Nit:不需要在返回时使用
await
,最后一行可以重写为:edqdpe6u4#
如何在C#中使用Playwright保存请求的响应体?
我在下面尝试获取响应体,但没有得到它。我必须在后面的代码中使用body进行Assert:
请帮帮忙