美文网首页
Cypress中使用Cypress.Cookies.preser

Cypress中使用Cypress.Cookies.preser

作者: 狄仁杰666 | 来源:发表于2021-10-04 02:18 被阅读0次

前言

来啦老铁!

今天是国庆第3天,再一次祝大家国庆快乐,祝祖国繁荣昌盛~

这个国庆其实还蛮无聊的,这是因为厦门现在还处于疫情的“扫尾期”,还不能到处玩~
这样的假期给我的另一个感想是:人的熬夜的潜力其实很大!
怎么说呢,就是看视频玩手机可以玩到深夜1 ~ 2点,那么咱们是不是可以花点时间来学习呢?
开个玩笑哈~

今天有个朋友向我问了个 Cypress 相关的问题,问题是这样的,这位朋友想跨用例保持浏览器会话,即用例1执行完成后,用例2不用再执行登录就能完成脚本运行,并且向我抛出了 Cypress 在这方面的现有API:

  • Cypress.Cookies.preserveOnce("XXX")

其中 XXX 是指我们要保存的 cookie 名称;

笔者在许久许久以前有用过,本着乐于助人的想法,帮忙看下吧,没想到,这个问题调查起来竟然没那么容易,而且网上的一些文章也没有提到 Cypress.Cookies.preserveOnce() 最正确的用法是什么样的,因此特地记录一下;

1. 原代码(伪代码)

describe('This is a test suite', () => {
    let url = 'xxx 网址';

    before(() => {
        cy.log("This is before");
    })

    it("This is test case 1", () => {
        // login

        // preserveOnce
        Cypress.Cookies.preserveOnce("token");
        
        // cookie 1
    })

    it("This is test case 2", () => {
        // cookie 2
    })
})

结果发现,每次执行到用例2的时候,都会自动调用一下 /logout?redirect_url=xxx 这个 API,导致后续的操作都是在登出的情况下操作的,与我们想要的效果完全不一样~

自动登出

经过1个多小时的调查,才终于找到问题所在~

2. 修改后(伪代码)

describe('This is a test suite', () => {
    let url = 'xxx 网址';
    let cookies = []

    before(() => {
        cy.log("This is before");

        // login
    })

    beforeEach(() => {
        for(c in cookies){
            Cypress.Cookies.preserveOnce(cookies(c));
        }
    })

    it("This is test case 1", () => {
        //  collect cookies' names
        cy.getCookies().each((cookie) => {
            cookies.push(cookie.name);
        })
        
        // cookie 1
    })

    it("This is test case 2", () => {
        // cookie 2
    })
})

这样改完之后,执行到用例2的时候,就不会再登出的情况下执行了,查看浏览器的Network方面的情况,发现 /logout?redirect_url=xxx 这个 API 也没有在用例2执行的时候执行了,与我们的预期一致,问题得到解决~

3. 结论

Cypress.Cookies.preserveOnce() 方法正确的使用地方应该是在 beforeEach 这个钩子:

  1. 如果要设置所有的浏览器 cookie,需要在登录后用 cy.getCookies().each ... 这种方式先记录 cookie 名称,然后在 beforeEach 中使用 Cypress.Cookies.preserveOnce() 方法;
  2. 如果 cookie 名已明确,则可以直接在 beforeEach 中使用,如:
Cypress.Cookies.preserveOnce("token");

好了,写文章到深夜1 ~ 2点了,对得起前几天玩到深夜1 ~ 2点的愧疚感了,加油骚年~

如果本文对您有帮助,麻烦动动手指点点赞?

谢谢!

相关文章

网友评论

      本文标题:Cypress中使用Cypress.Cookies.preser

      本文链接:https://www.haomeiwen.com/subject/ooisbktx.html