我想使用赛普拉斯保存cookie值,但是不幸的是,我总是使用此代码在日志控制台中未定义
let cookieValue;
cy.getCookie('SOME_COOKIE')
.should('have.property', 'value')
.then((cookie) => {
cookieValue = cookie.value;
})
cy.log(cookieValue);
当我尝试这个
let cookieValue;
cy.getCookie('SOME_COOKIE')
.should('have.property', 'value', 'Dummy value')
.then((cookie) => {
cookieValue = cookie.value;
})
cy.log(cookieValue);
我可以在错误消息中看到所需的实际值。
答案 0 :(得分:2)
Cypress异步工作,您不能像以前那样使用cookie值。
来自the docs
是否想跳入命令流并直接接触主题?没问题,只需在命令链中添加.then()即可。上一个命令解析后,它将以产生的主题作为第一个参数来调用您的回调函数。
您应该在then
回调中继续测试代码,而不要依赖外部let cookieValue
分配。
尝试一下
cy.getCookie('SOME_COOKIE')
.should('have.property', 'value')
.then((cookie) => {
cookieValue = cookie.value;
// YOU SHOULD CONSUME `cookieValue` here
// .. go ahead inside this `then` callback
})
答案 1 :(得分:0)
您还可以使用Async和await来代替在then()中添加代码
const getmyCookie = async (cookiename) => {
return cy.getCookie(cookiename)
.should('exist')
.then(async (c) => {
cy.log(c.value)
return c.value
})
}
在测试中使用它,并确保您的it块是异步的
it('Sample Test', async function () {
... some code
const cookie = await getmyCookie('cookiename')
cy.log(cookie)
... some code
})