赛普拉斯 - 在 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会触发要加载的新页面,但 cypress 不会等到引发PageLoad事件(因为您不使用visit(。在我的 PC 上,请求大约需要 5 秒,直到click后触发。所以你应该使用wait(..., { timeout: 10000 }).

第二:wait()生成 XHR 对象,而不是响应。因此,then中的代码不正确。此外,主体作为对象传递。因此,您应该使用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))
})
})
})

而不是路由和服务器方法,尝试直接拦截

最新更新