Skip to main content

Get the global window.location object of the page that is currently active.

Syntax​

cy.location()
cy.location(key)
cy.location(options)
cy.location(key, options)

Usage​

Correct Usage

cy.location() // Get location object
cy.location('host') // Get the host of the location object
cy.location('port') // Get the port of the location object

Arguments​

key (String)

A key on the location object. Returns this value instead of the full location object.

options (Object)

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

OptionDefaultDescription
logtrueDisplays the command in the Command log
timeoutdefaultCommandTimeoutTime to wait for cy.location() to resolve before timing out

Yields ​

cy.location() is a query, and it is safe to chain further commands.

When not given a key argument:​

cy.location() yields the location object with the following properties:

  • hash
  • host
  • hostname
  • href
  • origin
  • pathname
  • port
  • protocol
  • search
  • toString

When given a key argument:​

  • cy.location() yields the value of the location property as a string

Examples​

No Args​

Make assertions about every location property​

cy.visit('http://localhost:8000/app/index.html?q=dan#/users/123/edit')

cy.location().should((loc) => {
expect(loc.hash).to.eq('#/users/123/edit')
expect(loc.host).to.eq('localhost:8000')
expect(loc.hostname).to.eq('localhost')
expect(loc.href).to.eq(
'http://localhost:8000/app/index.html?q=dan#/users/123/edit'
)
expect(loc.origin).to.eq('http://localhost:8000')
expect(loc.pathname).to.eq('/app/index.html')
expect(loc.port).to.eq('8000')
expect(loc.protocol).to.eq('http:')
expect(loc.search).to.eq('?q=dan')
expect(loc.toString()).to.eq(
'http://localhost:8000/app/index.html?q=brian#/users/123/edit'
)
})

Check location for query params and pathname​

We can yield the location object within a .should() command and work with it directly.

cy.get('#search').type('niklas{enter}')
cy.location().should((loc) => {
expect(loc.search).to.eq('?search=niklas')
expect(loc.pathname).to.eq('/users')
})

Key​

Assert that a redirect works​

Grab only the pathname and add an assertion.

cy.visit('http://localhost:3000/admin')
cy.location('pathname').should('eq', '/login')

Notes​

Native Location​

No need to use window.location​

Cypress automatically normalizes the cy.location() command and strips out extraneous values and properties found in window.location. Also, the object literal yielded by cy.location() is a basic object literal, not the special window.location object.

When changing properties on the real window.location object, it forces the browser to navigate away. In Cypress, the object yielded is a plain object, so changing its properties will have no effect on navigation.

Console output of window.location​

cy.window().then((win) => {
console.log(win.location)
})
Console.log of window.location

Console output of .location()​

cy.location().then((loc) => {
console.log(loc)
})
Console Log of Cypress location command

Rules​

Requirements ​

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

Assertions ​

  • cy.location() will automatically retry until all chained assertions have passed

Timeouts ​

  • cy.location() can time out waiting for assertions you've added to pass.

Command Log​

Assert on the location's href

cy.location().should((loc) => {
expect(loc.href).to.include('commands/querying')
})

The commands above will display in the Command Log as:

Command Log of Cypress location command

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

Console Log of Cypress location command

See also​