Tester
Tester

Reputation: 27

How to get the return value from a custom command in Cypress?

I am writing a long test so I added the most reusable part to a Command Folder, however, I need access to a certain return value. How would I get the return value from the command?

Upvotes: 0

Views: 3001

Answers (2)

Fody
Fody

Reputation: 31944

Generally speaking, you need to return the value from the last .then().

Cypress puts the results of the commands onto the queue for you, and trailing .then() sections can modify the results.

Cypress.Commands.add('addStandardGrainSalesContract', () => {
  
  let salesContractNumber;

  cy.get('SalesContractsAddSelectors.SalesContractNumber').should($h2 => {
    ...
    salesContractNumber = ...
  })
  .then(() => {
    ...
    return salesContractNumber
  })
})

cy.addStandardGrainSalesContract().then(salesContractumber => {
  ...

Or this should work also

Cypress.Commands.add('addStandardGrainSalesContract', () => {
  
  cy.get('SalesContractsAddSelectors.SalesContractNumber').should($h2 => {
    ...
    const salesContractNumber = ...
    return salesContractNumber;  // pass into .then()
  })
  .then(salesContractNumber => {
    ...
    return salesContractNumber  // returns to outer code
  })
})

cy.addStandardGrainSalesContract().then(salesContractumber => {
  ...

Extra notes:

const salesContractHeader = $h2.text()  // don't need Cypress.$()
const salesContractNumber = salesContractHeader.split(' ').pop() // take last item in array

Upvotes: 2

Alapan Das
Alapan Das

Reputation: 18634

Instead of directly returning the salesContractNumber, wrap it and then return it like this:

Your custom command:

Cypress.Commands.add('addStandardGrainSalesContract', () => {
  //Rest of the code
  return cy.wrap(salesContractNumber)
})

In your test you can do this:

cy.addStandardGrainSalesContract().then((salesContractNumber) => {
cy.get(FixingsAddPageSelectors.ContractNumberField).type(salesContractNumber)
})

Upvotes: 1

Related Questions