location
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()
.
Option | Default | Description |
---|---|---|
log | true | Displays the command in the Command log |
timeout | defaultCommandTimeout | Time to wait for cy.location() to resolve before timing out |
Yields
cy.location()
is a query, and it is safe to chain further commands.
key
argument:
When not given a cy.location()
yields the location object with the following properties:
hash
host
hostname
href
origin
pathname
port
protocol
search
toString
key
argument:
When given a 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
window.location
No need to use 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.
window.location
Console output of cy.window().then((win) => {
console.log(win.location)
})
.location()
Console output of cy.location().then((loc) => {
console.log(loc)
})
Rules
Requirements
-
cy.location()
requires being chained off ofcy
.
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:
When clicking on location
within the command log, the console outputs the
following: