Skip to main content
Cypress App

getCookies

Get browser cookies for the current domain or the specified domain.

Syntax​

cy.getCookies()
cy.getCookies(options)

Usage​

Correct Usage

cy.getCookies() // Get cookies for the currrent domain

Arguments​

options (Object)

Pass in an options object to change the default behavior of cy.getCookies().

OptionDefaultDescription
domainHostname of the current URLRetrieves the cookies from the specified domain
logtrueDisplays the command in the Command log
timeoutresponseTimeoutTime to wait for cy.getCookies() to resolve before timing out

Yields Learn about subject management​

cy.getCookies() yields an array of cookie objects. Each cookie object has the following properties:

  • domain: (String)
  • expiry: (Number) (if specified)
  • hostOnly: (Boolean) (if specified)
  • httpOnly: (Boolean)
  • name: (String)
  • path: (String)
  • sameSite: (String) (if specified)
  • secure: (Boolean)
  • value: (String)

cy.getCookies() is not a query. It will not update the returned list if further cookies are added after it initially executes.

Examples​

Get Cookies​

Get cookies after logging in​

In this example, on first login our server sends us back a session cookie.

// assume we just logged in
cy.contains('Login').click()
cy.url().should('include', 'profile')
cy.getCookies()
.should('have.length', 1)
.then((cookies) => {
expect(cookies[0]).to.have.property('name', 'session_id')
})

Forward the session to another destination​

cy.request() already sends the browser's cookies for the request URL automatically, so you don't need to build a Cookie header to call your own logged-in API. Reach for this pattern only when you need to forward the current session somewhere Cypress won't attach cookies on its own, such as:

  • a different domain (cy.request() only sends cookies that match the request URL)
  • something outside the browser, like a cy.task(), cy.exec(), or an external HTTP client

In those cases, combine the cookies into a single Cookie header string:

cy.getCookies().then((cookies) => {
const cookieHeader = cookies.map((c) => `${c.name}=${c.value}`).join('; ')

cy.request({
url: 'https://api.other-service.com/protected',
headers: {
Cookie: cookieHeader,
},
})
})

Rules​

Requirements Learn about chaining commands​

  • cy.getCookies() requires being chained off of cy.

Assertions Learn about assertions​

  • cy.getCookies() will only run assertions you have chained once, and will not retry.

Timeouts Learn about timeouts​

  • cy.getCookies() should never time out.
caution

Because cy.getCookies() is asynchronous it is technically possible for there to be a timeout while talking to the internal Cypress automation APIs. But for practical purposes it should never happen.

Command Log​

Get browser cookies and inspect all properties

cy.getCookies()
.should('have.length', 1)
.then((cookies) => {
expect(cookies[0]).to.have.property('name', 'fakeCookie1')
expect(cookies[0]).to.have.property('value', '123ABC')
expect(cookies[0]).to.have.property('domain')
expect(cookies[0]).to.have.property('httpOnly')
expect(cookies[0]).to.have.property('path')
expect(cookies[0]).to.have.property('secure')
})

The commands above will display in the Command Log as:

Command Log getcookies

When clicking on getCookies within the command log, the console outputs the following:

Console Log getcookies

History​

VersionChanges
5.0.0Removed experimentalGetCookiesSameSite and made sameSite property always available.
4.3.0Added sameSite property when the experimentalGetCookiesSameSite configuration value is true.

See also​