Cypress系列(40)- getCookies()、setCookie()、clearCookie()、clearCookies() 命令详解

362 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

getCookies 作用

获取所有 Cookie,返回一个 Cookie 对象数组

语法格式

cy.getCookies()
cy.getCookies(options)

options 参数

  • log: 是否将命令显示到命令日志中,默认 true
  • timeout: 命令超时时间

正确用法

cy.getCookies()

命令返回结果

返回一个 Cookie 对象组成的数组,每个 Cookie 对象都包含以下属性

  • domain
  • expiry (如果有)
  • httpOnly
  • name
  • path
  • sameSite (如果有)
  • secure
  • value

实际栗子

栗子一:直接访问网站

代码

可以用 .each() 来遍历 Cookie 对象数组

运行结果

getCookies 返回结果

Cookie 对象数组

栗子二:简单登录页面

代码

//<reference types="cypress" /R>

describe('getCookies 登录页面', function () {

    const username = 'jane.lane'
    const password = 'password123'

    before(function () {
        // 登录操作
        cy.visit("http://localhost:7079/login")
        cy.get("input[name=username]").type(username)
        cy.get("input[name=password]").type(password)
        cy.get("form").submit()
    })

    it('获取登录后的 cookie', function () {
        cy.getCookies()
            .should('exist')
            .should('have.length', 1)
            .each((cookie) => {
                // 循环遍历每个 Cookie 对象
                cy.log(cookie)
            })
            .then((cookies) => {
                // 打印 Cookie 对象数组
                cy.log(cookies)
            })
    })
})

运行结果

setCookie 作用

设置一个 Cookie

语法格式

cy.setCookie(name, value)
cy.setCookie(name, value, options)

name

Cookie 的名称

 

value

Cookie 的值

options 参数

正确用法

cy.setCookie('auth_key', '123key')

命令返回结果

返回设置的 Cookie 对象并且包含以下属性

  • domain
  • expiry (如果有)
  • httpOnly
  • name
  • path
  • sameSite (如果有)
  • secure
  • value

实际栗子

代码

运行结果

setCookie 返回结果

clearCookie 作用

清除指定名称的 Cookie

 

前言重点知识

  • Cypress 会在每次测试前自动清除所有 Cookie,以防止在测试用例之间共享状态
  • 除非在测试用例中需要调用此命令清除某个 Cookie,否则不需要使用该命令

语法格式

cy.clearCookie(name)
cy.clearCookie(name, options)

name 必传 

options 参数

  • log: 是否将命令显示到命令日志中,默认 true
  • timeout: 命令超时时间

正确用法

// 清除 token 这个 Cookie
cy.clearCookie('token')

命令返回结果

  • 返回 null
  • 重点: 该命令后面不能再链接其他命令

 

实际栗子

代码

describe('clearCookie() 命令详解', function () {
    beforeEach(() => {
        cy.visit('https://example.cypress.io/commands/cookies')
    })

    it('栗子一', () => {
        // 执行测试用例, 暂无 Cookie
        cy.getCookie('token')
            .should('be.null')

        // 获取 Cookie
        cy.get('#clearCookie .set-a-cookie').click()
        cy.getCookie('token')
            .should('have.property', 'value', '123ABC')

        // 清除 Cookie
        cy.clearCookie('token')
        cy.getCookie('token')
            .should('be.null')
    })

    it('栗子二', () => {
        // 测试用例之间 Cookie 不会共享
        cy.getCookie('token')
            .should('be.null')
    })
})

可以使用 .should('be.null') 判断某 Cookie 是空的

 

运行结果

 

clearCookie 返回结果

clearCookies 作用

清除所有 Cookie

前言重点知识

  • Cypress 会在每次测试前自动清除所有 Cookie,以防止在测试用例之间共享状态
  • 除非在测试用例中需要调用此命令清除所有 Cookie,否则不需要使用该命令

语法格式

cy.clearCookies()
cy.clearCookies(options)

options 参数

  • log: 是否将命令显示到命令日志中,默认 true
  • timeout: 命令超时时间

正确用法

// 清除所有 Cookie
cy.clearCookies()

命令返回结果

  • 返回 null
  • 重点: 该命令后面不能再链接其他命令

实际栗子

代码

//<reference types="cypress" /R>

describe('clearCookies 登录页面', function () {

    const username = 'jane.lane'
    const password = 'password123'

    before(function () {
        // 登录操作
        cy.visit("http://localhost:7079/login")
        cy.get("input[name=username]").type(username)
        cy.get("input[name=password]").type(password)
        cy.get("form").submit()
    })

    it('获取登录后的 cookie', function () {
        // 获取登录后的 Cookie
        cy.getCookie("cypress-session-cookie")
            .should('exist')

        // 清空 Cookie
        cy.clearCookies()

        // 再次查看 Cookie
        cy.getCookies()
            .should('be.empty')
    })
})

运行结果

clearCookies 返回结果