{"__v":1,"_id":"56902a8848df220d004ca224","category":{"__v":60,"_id":"569002f19ebef90d0087289d","pages":["56900352769f210d00132595","5690047121fcf0190071d943","569004924719c119002ce654","569004ceb700ce0d002f4b94","569023e518c3920d00be8b37","569023f748df220d004ca215","5690240af7eb9a0d00f4465d","5690241b48df220d004ca217","5690243e48df220d004ca219","56902453741e9c0d00af2fb5","56902463efcc380d0043a5a1","5690247b18c3920d00be8b39","56902492f7eb9a0d00f4465f","569024a16c49d70d00f18075","569024b2efcc380d0043a5a3","569024cc48df220d004ca21b","569024ea18c3920d00be8b3b","5690258618c3920d00be8b3f","5690259bf7eb9a0d00f44662","569025b06c49d70d00f18077","569029b418c3920d00be8b43","569029d4f7eb9a0d00f44667","569029e8e056c80d00fdec58","569029fb48df220d004ca221","56902a1c18c3920d00be8b46","56902a45f7eb9a0d00f44669","56902a6be056c80d00fdec5a","56902a78f7eb9a0d00f4466b","56902a8848df220d004ca224","56902aa018c3920d00be8b4b","56902ace6c49d70d00f18085","56902ae0741e9c0d00af2fc6","56902aee48df220d004ca226","56902af8f7eb9a0d00f44674","56902b26efcc380d0043a5b1","56902b8148df220d004ca22a","56902ba918c3920d00be8b55","56902bb96c49d70d00f1808b","56902bc818c3920d00be8b57","56902bd518c3920d00be8b59","56902be218c3920d00be8b5b","56902bf66c49d70d00f1808e","56902c05e056c80d00fdec5d","56902c196c49d70d00f18090","56902c2648df220d004ca22d","56902c34f7eb9a0d00f44678","56902c5518c3920d00be8b5d","56902c62741e9c0d00af2fcc","56902cde48df220d004ca230","56902cea741e9c0d00af2fcf","56902d0ae056c80d00fdec60","56902d20efcc380d0043a5b4","56902d3448df220d004ca232","5696c3fbf9203821005fe2fb","5696c3fb9e2d000d00947ab0","5696c3fbf9203821005fe2fa","5697efee8d2a770d00d2fd17","569802611c4dc823005426c7","56a65c82b3ffe00d00156eaf","56f01f88332da41700f24b74"],"project":"568fde81b700ce0d002f4b43","version":"568fde82b700ce0d002f4b46","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2016-01-08T18:41:53.562Z","from_sync":false,"order":1,"slug":"commands","title":"Commands"},"parentDoc":null,"project":"568fde81b700ce0d002f4b43","user":"568fffce769f210d0013258f","version":{"__v":23,"_id":"568fde82b700ce0d002f4b46","project":"568fde81b700ce0d002f4b43","createdAt":"2016-01-08T16:06:26.373Z","releaseDate":"2016-01-08T16:06:26.373Z","categories":["568fde82b700ce0d002f4b47","568ff0e504440a1700e4cbbd","569002f19ebef90d0087289d","569004f4769f210d00132599","5690056d9ebef90d008728a0","569005d394c5030d0028813a","5690067804440a1700e4cbe2","569137eb3c4f510d00ec9b92","56913815e56a790d008dbfe3","569138ba3c4f510d00ec9b93","5691392f3c4f510d00ec9b94","56913bbe72f2810d007e4cb0","56933b8d6ebadc0d005b71d2","56933b8d6ebadc0d005b71d3","569564facaa32519009c41e6","5696a319b6d61f0d00acfb40","5696a319a857080d0082e8e8","5697efe43503e40d0061f4d1","5697efe48d2a770d00d2fd16","569e9597ffccd10d00a05c59","56a7a1523d33bc2100793d5c","56a7a32ecf6d771700baeee8","56b8b0f7ddeb231700e69825"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":false,"codename":"bar","version_clean":"1.0.0","version":"1.0"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2016-01-08T21:30:48.711Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":35,"body":"Get the remote `window.location` as a normalized object.\n\n| | |\n|--- | --- |\n| **Returns** | location object detailed below |\n| **Timeout** | *cannot timeout* |\n\n# [cy.location()](#section-usage)\n\nGiven a remote URL of `http://localhost:8000/app/index.html?q=dan#/users/123/edit`, an object would be returned with the following properties:\n\nKey | Type | Returns\n--- | --- | ----\n`hash` | string | #/users/123/edit\n`host` | string | localhost:8000\n`hostname` | string | localhost\n`href` | string | http://localhost:8000/app/index.html?q=brian#/users/123/edit\n`origin` | string | http://localhost:8000\n`pathname` | string | /app.index.html\n`port` | string | 8000\n`protocol` | string | http:\n`search` | string | ?q=brian\n`toString` | function | http://localhost:8000/app/index.html?q=brian#/users/123/edit\n\n***\n\n# [cy.location( *key* )](#section-key-usage)\n\nGet the specific value by key of the location object above.\n\n***\n\n# Options\n\nPass in an options object to change the default behavior of `cy.location`.\n\n**cy.location( *options* )**\n**cy.location( *key*, *options* )**\n\nOption | Default | Notes\n--- | --- | ---\n`log` | `true` | whether to display command in command log\n\n***\n\n# Usage\n\n## Check location for query params and pathname\n\n[block:code]\n{\n    \"codes\": [\n        {\n            \"code\": \"// we can yield the location subject and work with\\n// it directly as an object\\ncy\\n  .get(\\\"#search\\\").type(\\\"brian{enter}\\\")\\n  .location().should(function(location){\\n    expect(location.search).to.eq(\\\"?search=brian\\\")\\n    expect(location.pathname).to.eq(\\\"/users\\\")\\n    expect(location.toString()).to.eq(\\\"http://localhost:8000/users?search=brian\\\")\\n  })\\n\",\n            \"language\": \"javascript\"\n        }\n    ]\n}\n[/block]\n\n***\n\n# Key Usage\n\n## Assert that a redirect works\n\n[block:code]\n{\n    \"codes\": [\n        {\n            \"code\": \"// we should be redirected to the login page\\ncy\\n  .visit(\\\"http://localhost:3000/admin\\\")\\n  .location(\\\"pathname\\\").should(\\\"eq\\\", \\\"/login\\\")\\n\",\n            \"language\": \"javascript\"\n        }\n    ]\n}\n[/block]\n\n***\n\n# Notes\n\n## Do not use `window.location`\n\nLet's examine the following scenario:\n\n[block:code]\n{\n    \"codes\": [\n        {\n            \"code\": \"// get our remote window and log out\\n// the window.location object\\ncy.window().then(function(window){\\n  console.log(window.location)\\n})\\n\",\n            \"language\": \"javascript\"\n        }\n    ]\n}\n[/block]\n\n[block:code]\n{\n    \"codes\": [\n        {\n            \"code\": \"// go through the location command\\n// and log out this object\\ncy.location().then(function(location){\\n  console.log(location)\\n})\\n\",\n            \"language\": \"javascript\"\n        }\n    ]\n}\n[/block]\n\nCypress automatically normalizes the `cy.location()` command and strips out extrenuous values and properties found in `window.location`. Also the object literal returned by `cy.location()` is just a basic object literal, not the special `window.location` object.\n\nWhen changing properties on the real `window.location` object, it will force the browser to navigate away. In Cypress, the object we returned is a plain object, and changing or affecting its properties will have no effect on navigation.\n\n***\n\n# Command Log\n\n## Assert on the location's href\n\n[block:code]\n{\n    \"codes\": [\n        {\n            \"code\": \"cy.location().should(function(location){\\n  expect(location.href).to.include(\\\"commands/querying\\\")\\n})\\n\",\n            \"language\": \"javascript\"\n        }\n    ]\n}\n[/block]\n\nThe commands above will display in the command log as:\n\n![screen shot 2017-03-09 at 1 54 22 pm](https://cloud.githubusercontent.com/assets/1268976/23765705/0768366a-04d0-11e7-8936-beb7d546cbc7.png)\n\nWhen clicking on `location` within the command log, the console outputs the following:\n\n![screen shot 2017-03-09 at 1 54 58 pm](https://cloud.githubusercontent.com/assets/1268976/23765706/089375e0-04d0-11e7-8344-5872c6f270b2.png)\n\n***\n\n# Related\n\n- [hash](https://on.cypress.io/api/hash)\n- [url](https://on.cypress.io/api/url)","excerpt":"Get the `window.location`","slug":"location","type":"basic","title":"location"}

location

Get the `window.location`

Get the remote `window.location` as a normalized object. | | | |--- | --- | | **Returns** | location object detailed below | | **Timeout** | *cannot timeout* | # [cy.location()](#section-usage) Given a remote URL of `http://localhost:8000/app/index.html?q=dan#/users/123/edit`, an object would be returned with the following properties: Key | Type | Returns --- | --- | ---- `hash` | string | #/users/123/edit `host` | string | localhost:8000 `hostname` | string | localhost `href` | string | http://localhost:8000/app/index.html?q=brian#/users/123/edit `origin` | string | http://localhost:8000 `pathname` | string | /app.index.html `port` | string | 8000 `protocol` | string | http: `search` | string | ?q=brian `toString` | function | http://localhost:8000/app/index.html?q=brian#/users/123/edit *** # [cy.location( *key* )](#section-key-usage) Get the specific value by key of the location object above. *** # Options Pass in an options object to change the default behavior of `cy.location`. **cy.location( *options* )** **cy.location( *key*, *options* )** Option | Default | Notes --- | --- | --- `log` | `true` | whether to display command in command log *** # Usage ## Check location for query params and pathname [block:code] { "codes": [ { "code": "// we can yield the location subject and work with\n// it directly as an object\ncy\n .get(\"#search\").type(\"brian{enter}\")\n .location().should(function(location){\n expect(location.search).to.eq(\"?search=brian\")\n expect(location.pathname).to.eq(\"/users\")\n expect(location.toString()).to.eq(\"http://localhost:8000/users?search=brian\")\n })\n", "language": "javascript" } ] } [/block] *** # Key Usage ## Assert that a redirect works [block:code] { "codes": [ { "code": "// we should be redirected to the login page\ncy\n .visit(\"http://localhost:3000/admin\")\n .location(\"pathname\").should(\"eq\", \"/login\")\n", "language": "javascript" } ] } [/block] *** # Notes ## Do not use `window.location` Let's examine the following scenario: [block:code] { "codes": [ { "code": "// get our remote window and log out\n// the window.location object\ncy.window().then(function(window){\n console.log(window.location)\n})\n", "language": "javascript" } ] } [/block] [block:code] { "codes": [ { "code": "// go through the location command\n// and log out this object\ncy.location().then(function(location){\n console.log(location)\n})\n", "language": "javascript" } ] } [/block] Cypress automatically normalizes the `cy.location()` command and strips out extrenuous values and properties found in `window.location`. Also the object literal returned by `cy.location()` is just a basic object literal, not the special `window.location` object. When changing properties on the real `window.location` object, it will force the browser to navigate away. In Cypress, the object we returned is a plain object, and changing or affecting its properties will have no effect on navigation. *** # Command Log ## Assert on the location's href [block:code] { "codes": [ { "code": "cy.location().should(function(location){\n expect(location.href).to.include(\"commands/querying\")\n})\n", "language": "javascript" } ] } [/block] The commands above will display in the command log as: ![screen shot 2017-03-09 at 1 54 22 pm](https://cloud.githubusercontent.com/assets/1268976/23765705/0768366a-04d0-11e7-8936-beb7d546cbc7.png) When clicking on `location` within the command log, the console outputs the following: ![screen shot 2017-03-09 at 1 54 58 pm](https://cloud.githubusercontent.com/assets/1268976/23765706/089375e0-04d0-11e7-8344-5872c6f270b2.png) *** # Related - [hash](https://on.cypress.io/api/hash) - [url](https://on.cypress.io/api/url)