Cypress保存Cookie值

4
我想使用Cypress保存cookie值,但不幸的是,使用此代码时,在日志控制台中始终获取undefined结果。
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);

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


如果这个答案解决了你的问题,请接受它,这将对其他遇到同样问题的用户非常有帮助。 - NoriSte
当然!再次感谢 :) - ounis
2个回答

7

Cypress工作是异步的,你不能像以前那样使用cookie值。

来自文档

想要直接跳转到命令流并直接获取主题?没问题,只需在命令链中添加.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
    })

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接