如何使用剧作家等待请求和验证响应?
How to wait for requests and validate responses using playwright?
这是我第一次使用 playwright,我不知道如何等待请求和验证响应。
我已经使用 cypress 很长时间了,它很容易管理网络请求。
例如,我需要在单击按钮后验证响应,这就是我使用 cypress 的方式:
cy.server()
cy.route('POST', '/api/contacts').as('newContact')
cy.get('.btn').click()
cy.wait('@newContact').then((response) => {
expect(response.status).to.eq(400)
expect(response.responseBody.data.name).to.eq('abcde')
})
这就是我尝试对剧作家做同样事情的方式,但它验证了 GET
甚至在点击保存按钮之前很久就发送的请求。我不知道如何正确管理这个请求,这对我的测试套件来说是个阻碍:
await contacts.clickSaveBtn()
await page.waitForResponse((resp) => {
resp.url().includes('/api/contacts')
expect(resp.status()).toBe(400)
})
非常感谢任何帮助或建议
您需要做的是先开始等待响应,然后点击,这样 waitForResponse()
就可以捕捉到点击后的实际响应。
await Promise.all([
page.waitForResponse(resp => resp.url().includes('/api/contacts') && resp.status() === 400),
contacts.clickSaveBtn()
]);
这应该可以处理可能的竞争条件。
这是我第一次使用 playwright,我不知道如何等待请求和验证响应。 我已经使用 cypress 很长时间了,它很容易管理网络请求。 例如,我需要在单击按钮后验证响应,这就是我使用 cypress 的方式:
cy.server()
cy.route('POST', '/api/contacts').as('newContact')
cy.get('.btn').click()
cy.wait('@newContact').then((response) => {
expect(response.status).to.eq(400)
expect(response.responseBody.data.name).to.eq('abcde')
})
这就是我尝试对剧作家做同样事情的方式,但它验证了 GET
甚至在点击保存按钮之前很久就发送的请求。我不知道如何正确管理这个请求,这对我的测试套件来说是个阻碍:
await contacts.clickSaveBtn()
await page.waitForResponse((resp) => {
resp.url().includes('/api/contacts')
expect(resp.status()).toBe(400)
})
非常感谢任何帮助或建议
您需要做的是先开始等待响应,然后点击,这样 waitForResponse()
就可以捕捉到点击后的实际响应。
await Promise.all([
page.waitForResponse(resp => resp.url().includes('/api/contacts') && resp.status() === 400),
contacts.clickSaveBtn()
]);
这应该可以处理可能的竞争条件。