我一般不熟悉自动化和编码,我想通过以下步骤比较两个会话ID值:
- 登录后立即获取第一个值
- 刷新页面
- 获取第二个值并进行断言。
为了简化事情,我做了一个自定义命令:文章源自玩技e族-https://www.playezu.com/194609.html
Cypress.com命令。添加('getSessionId',()=>;{文章源自玩技e族-https://www.playezu.com/194609.html
let sessionId
cy.getCookie('development')
.its('value').then(($value) => {
sessionId = String($value)
})
})文章源自玩技e族-https://www.playezu.com/194609.html
我希望测试脚本看起来像这样:文章源自玩技e族-https://www.playezu.com/194609.html
...文章源自玩技e族-https://www.playezu.com/194609.html
设firstSessionId=cy.getSessionId()文章源自玩技e族-https://www.playezu.com/194609.html
cy.reload()文章源自玩技e族-https://www.playezu.com/194609.html
设secondSessionId=cy.getSessionId()文章源自玩技e族-https://www.playezu.com/194609.html
expect(firstSessionId).to.eq(secondSessionId)文章源自玩技e族-https://www.playezu.com/194609.html
...文章源自玩技e族-https://www.playezu.com/194609.html
这有两个问题:
- 在这种情况下,我无法以字符串形式访问这些值
- expect在获得ID之前运行(我猜是因为cypress的异步特性?)
如果有任何关于我做错了什么的暗示,我将不胜感激。谢谢
深圳软件测试
未知地区 2F
这是执行测试的最简单方法,在这种情况下不需要自定义命令。
cy.getCookie(‘development’).its(‘value’)
.then(sessionId1 => {
cy.reload()
cy.getCookie(‘development’).its(‘value’)
.then(sessionId2 => {
expect(sessionId1).to.eq(sessionId2)
})
})
如果出于其他原因需要自定义命令,
Cypress.Commands.add(‘getSessionId’, () => {
cy.getCookie(‘development’).its(‘value’) // last command is returned
})
cy.getSessionId().then(sessionId1 => {
cy.reload()
cy.getSessionId().then(sessionId2 => {
expect(sessionId1).to.eq(sessionId2)
})
})
未知地区 1F
您可以通过自定义命令返回值,如下所示:
Cypress.Commands.add(‘getSessionId’, () => {
cy.getCookie(‘development’)
.its(‘value’)
.then((val) => {
return cy.wrap(val)
})
})
然后在测试中,您可以执行以下操作:
//Get First session Id
cy.getSessionId.then((sessionId1) => {
cy.wrap(sessionId1).as(‘sessionId1’)
})
//Refresh Page
cy.reload()
//Get Second session Id
cy.getSessionId.then((sessionId2) => {
cy.wrap(sessionId2).as(‘sessionId2’)
})
//Assert both
cy.get(‘@sessionId1’).then((sessionId1) => {
cy.get(‘@sessionId2’).then((sessionId2) => {
expect(sessionId1).to.eq(sessionId2)
})
})