如何从赛普拉斯的自定义命令中获取 return 值?

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

我正在编写一个长测试,所以我将最可重用的部分添加到命令文件夹,但是,我需要访问某个 return 值。我如何从命令中获取 return 值?

不要直接 return 在 salesContractNumber 中,将其包装起来然后 return 像这样:

您的自定义命令:

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

在你的测试中你可以这样做:

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

一般来说,您需要 return 上次 .then() 的值。

Cypress 会为您将命令的结果放入队列,尾随 .then() 部分可以修改结果。

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

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

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

或者这也应该有效

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 => {
  ...

补充说明:

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