Использование асинхронного ожидания в Cypress

#javascript #node.js #async-await #cypress

Вопрос:

Я очень новичок в Cypress и пытаюсь извлечь значение из элемента для последующего использования в тесте, но мне не удается получить значение. Кто-то сказал, что мне нужно использовать async await, но это не работает, или, может быть, я делаю что-то не так. Заранее спасибо!

 it.only('should access Time Worked section and insert same Staff Complement value, but negative as Flexitime',  function () {
        let timeValue = 0;
        cy.get('[data-tag="staff-complement-input"] > div > span').invoke('text').then(text =>  text).then(($val) => {
            // $val = 420
            timeValue = $val;
            cy.log(timeValue) //420
        })
        cy.log(timeValue) // 0
        // need timeValue to be 420
 })
 

Комментарии:

1. Cypress не предоставляет обещаний, хотя интерфейс «с поддержкой» может выглядеть так, как будто это так, поэтому вы не можете await оценить значение. Прочитайте, например docs.cypress.io/guides/core-concepts/variables-and-aliases .

Ответ №1:

Вы можете использовать псевдонимы, сохранить значение и использовать его позже.

 cy.get('[data-tag="staff-complement-input"] > div > span')
  .invoke("text")
  .then((text) =>  text)
  .as("someNum")

cy.get("@someNum").then((someNum) => {
  cy.log(someNum) //420
})
 

Следует помнить, что cypress очищает псевдонимы после каждого теста. Таким образом, вышесказанное будет работать только в том случае, если вы делаете все под одним it() блоком.