赛普拉斯保存cookie值

时间:2019-03-14 17:10:21

标签: javascript node.js cypress

我想使用赛普拉斯保存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);

我可以在错误消息中看到所需的实际值。

2 个答案:

答案 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
})