Как написать значение json, используя переменную в кипарисе

          it ('check link', () => {
        cy.visit(/)

        var link1_value
        var link2_value
        var datasheet_value

        cy.get('[class="classname"]').then(($link1) => {
            if ($link1.find('[data-type="link1"]').length>0){
                cy.get('[data-type="link1"]').invoke('text').as('link1')
                cy.get('@link1').then((link1) => {
                    link1_value = 'Link1:' + link1

                })
            }
            else {
                link1_value= '0'
            }

  
                }) //there's another one like this for link2

                cy.writeFile('txt.json', { link1: link1_value ,link2: link2_value })
})

        

Приведенный выше код не работает, поскольку в link1_value нет данных. Как мне добавить значение, чтобы оно отображалось в файле json?

1 ответ

Для начала обернитеcy.writeFile()в.then().

      it('check link', () => {
  cy.visit('/')

  let link1_value
  let link2_value
  let datasheet_value

  cy.get('[class="classname"]').then(($link1) => {
    if ($link1.find('[data-type="link1"]').length > 0) {
      cy.get('[data-type="link1"]').invoke('text').as('link1')
      cy.get('@link1').then((link1) => {
        link1_value = 'Link1:' + link1
      })
    }
    else {
      link1_value = '0'
    }
  }) 
  .then(() => {       // delays the writeFile until after above code finishes

    cy.writeFile('txt.json', { link1: link1_value, link2: link2_value })
  })
})

Вы также можете попробовать пакет cypress-if

      it('check link', () => {
  cy.visit('/')

  let link1_value
  let link2_value
  let datasheet_value

  cy.get('[class="classname"]')
    .find('[data-type="link1"]')
    .if()
    .then($link1 => link1_value = $link1.text())
    .else()
    .then(() => link1_value = '0')
    .finally(() => {
      cy.writeFile('txt.json', { link1: link1_value, link2: link2_value })
    })
})

Без переменных (передача результатов по цепочке)

      it('check link', () => {
  cy.visit('/')

  cy.get('[class="classname"]')
    .find('[data-type="link1"]')
    .if()
    .then($link1 => $link1.text())
    .else()
    .then(() => '0')
    .finally(link1_value => {
      cy.writeFile('txt.json', { link1: link1_value, link2: link2_value })
    })
})

Со 2-й ссылкой

      const getLink = (link) => {
  return cy.get('[class="classname"]')
    .find(`[data-type="${link}"]`)   // backticks to insert "link" parameter
    .if()
    .then($link => $link.text())
    .else()
    .then(() => '0')
}

it('check link', () => {
  cy.visit('/')

  getLink('link1')
    .then(link1_value => {
      getLink('link2')
        .then(link2_value => {
          cy.writeFile('txt.json', { 
            link1: link1_value, 
            link2: link2_value 
          })
        }) 
    })
})
Другие вопросы по тегам