携手创作,共同成长!这是我参与「掘金日新计划 · 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')
})
})