赛普拉斯 - 在点击后记录来自请求的响应数据()
Cypress - log response data from an request after a click()
虽然我知道这可能不是最佳实践,但我想要实现的是在整个 UI 中创建记录后从数据库中静默删除记录。在 htat 方式中,我希望尽可能保持我们的测试环境清晰并减少测试数据的噪音。
在我的测试通过单击 UI 创建新记录后,我等待 POST 请求完成,然后我想从响应中提取 ID(以便我可以重复使用它通过调用 cy.request('DELETE', '/id')
).
静默删除该记录
这是我作为展示展示的样本测试。我想知道为什么此示例中没有记录任何内容。
it('GET cypress and log', () => {
cy.server()
.route('**/repos/cypress-io/cypress*')
.as('getSiteInfo');
cy.visit('https://www.cypress.io/dashboard');
cy.get('img[alt="Cypress.io"]')
.click()
.wait('@getSiteInfo')
.then((response) => {
cy.log(response.body)
})
})
据我所知https://docs.cypress.io/api/commands/wait.html#Alias这应该没问题。
您的代码有两个问题。
首先:
click
触发加载新页面,但赛普拉斯不会等到引发 PageLoad
事件(因为您不使用 visit
)。在我的 PC 上,请求大约需要 5 秒,直到它在 click
之后被触发。所以你应该使用 wait(..., { timeout: 10000 })
.
第二个:
wait()
生成 XHR object,而不是响应。所以你在 then
中的代码不正确。 body 也作为 object 传递。所以你应该使用 JSON.stringify()
在命令日志中查看结果。
此代码有效:
describe("asda", () => {
it('GET cypress and log', () => {
cy.server()
.route('**/repos/cypress-io/cypress*')
.as('getSiteInfo');
cy.visit('https://www.cypress.io/dashboard');
cy
.get('img[alt="Cypress.io"]')
.click()
.wait('@getSiteInfo', { timeout: 20000 })
.then((xhr) => {
cy.log(JSON.stringify(xhr.response.body))
})
})
})
虽然我知道这可能不是最佳实践,但我想要实现的是在整个 UI 中创建记录后从数据库中静默删除记录。在 htat 方式中,我希望尽可能保持我们的测试环境清晰并减少测试数据的噪音。
在我的测试通过单击 UI 创建新记录后,我等待 POST 请求完成,然后我想从响应中提取 ID(以便我可以重复使用它通过调用 cy.request('DELETE', '/id')
).
这是我作为展示展示的样本测试。我想知道为什么此示例中没有记录任何内容。
it('GET cypress and log', () => {
cy.server()
.route('**/repos/cypress-io/cypress*')
.as('getSiteInfo');
cy.visit('https://www.cypress.io/dashboard');
cy.get('img[alt="Cypress.io"]')
.click()
.wait('@getSiteInfo')
.then((response) => {
cy.log(response.body)
})
})
据我所知https://docs.cypress.io/api/commands/wait.html#Alias这应该没问题。
您的代码有两个问题。
首先:
click
触发加载新页面,但赛普拉斯不会等到引发 PageLoad
事件(因为您不使用 visit
)。在我的 PC 上,请求大约需要 5 秒,直到它在 click
之后被触发。所以你应该使用 wait(..., { timeout: 10000 })
.
第二个:
wait()
生成 XHR object,而不是响应。所以你在 then
中的代码不正确。 body 也作为 object 传递。所以你应该使用 JSON.stringify()
在命令日志中查看结果。
此代码有效:
describe("asda", () => {
it('GET cypress and log', () => {
cy.server()
.route('**/repos/cypress-io/cypress*')
.as('getSiteInfo');
cy.visit('https://www.cypress.io/dashboard');
cy
.get('img[alt="Cypress.io"]')
.click()
.wait('@getSiteInfo', { timeout: 20000 })
.then((xhr) => {
cy.log(JSON.stringify(xhr.response.body))
})
})
})