---
id: api/commands/location
title: location | Cypress Documentation
description: >-
  Get the global `window.location` object of the page that is currently active
  in Cypress.
section: api
source_path: docs/api/commands/location.mdx
version: 7ada28c0cd90e81cf56fd3fc73de6e6d45c16de6
updated_at: '2026-05-13T21:55:41.935Z'
---
# 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 objectcy.location('host') // Get the host of the location objectcy.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](/llm/markdown/app/core-concepts/open-mode.md#Command-Log) |
| `timeout` | [`defaultCommandTimeout`](/llm/markdown/app/references/configuration.md#Timeouts) | Time to wait for `cy.location()` to resolve before [timing out](#Timeouts) |

### Yields [Learn about subject management](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Subject-Management)

`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()`](/llm/markdown/api/commands/should.md) 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 output of `.location()`

```
cy.location().then((loc) => {  console.log(loc)})
```

## Rules

### Requirements [Learn about chaining commands](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Chains-of-Commands)

*   `cy.location()` requires being chained off of `cy`.

### Assertions [Learn about assertions](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Assertions)

*   `cy.location()` will automatically [retry](/llm/markdown/app/core-concepts/retry-ability.md) until all chained assertions have passed

### Timeouts [Learn about timeouts](/llm/markdown/app/core-concepts/introduction-to-cypress.md#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:

## See also

*   [`cy.hash()`](/llm/markdown/api/commands/hash.md)
*   [`cy.url()`](/llm/markdown/api/commands/url.md)
