Mike Roberts
Mike Roberts

Reputation: 41

Cypress - extract URL info

I have this URL :

https://www.acme.com/book/passengers?id=h1c7cafc-5457-4564-af9d-2599c6a37dde&hash=7EPbMqFFQu8T5R3AQr1GCw&gtmsearchtype=City+Break

and want to store these values :

id=h1c7cafc-5457-4564-af9d-2599c6a37dde hash=7EPbMqFFQu8T5R3AQr1GCw

for use in a later test.

How do I extract these values from the URL? I am using Cypress. Thanks.

Upvotes: 1

Views: 2066

Answers (3)

Srinu Kodi
Srinu Kodi

Reputation: 512

Please follow the following steps and that's all there is to it.

You can put this snippet into before() hooks of your spec file and you can access them wherever you want.

cy.location().then(fullUrl => {
      let pathName = fullUrl.pathname
      let arr = pathName.split('?');
      let arrayValues = arr[1].split('&');
      cy.log(arrayValues[0]);
      cy.log(arrayValues[1]);
      cy.log(arrayValues[2]);
    })

Upvotes: 1

Lyonne
Lyonne

Reputation: 176

In case anyone needs the correct answer, use the cy.location('search') to extract the search part of the location data.

Then for convenience, convert it to a javascript object with key/value pairs for each item.

Finally, store it in a Cypress alias to use later in the test.

cy.location('search')
  .then(search=> {
    const searchValues = search.split('?')[1].split('&')
    // yields: [
    //   id=h1c7cafc-5457-4564-af9d-2599c6a37dde, 
    //   hash=7EPbMqFFQu8T5R3AQr1GCw, 
    //   gtmsearchtype=City+Break
    // ]
    
    const searchMap = searchValues.reduce((acc,item) => {
      const [key,value] = item.split('=')
      acc[key] = value.replace('+', ' ')
      return acc
    }, {})
    // yields: {
    //   id: "h1c7cafc-5457-4564-af9d-2599c6a37dde", 
    //   hash: "7EPbMqFFQu8T5R3AQr1GCw", 
    //   gtmsearchtype: "City Break"
    // }

    cy.wrap(searchMap).as('searchMap')
  })

Upvotes: 1

RasmusEmil
RasmusEmil

Reputation: 31

Using @Srinu Kodi's answer I got it working changing ...then(fullUrl => ... to ...then((fullUrl) => ...

Upvotes: 0

Related Questions