Cypress не хранит значение глобальной переменной?

#cypress

Вопрос:

У меня есть такой код кипариса. Когда он запускается, «результат 1» имеет значение, а «результат 2» — нет. Мой вопрос : cypress будет хранить значение только внутри своего блока ? Как я могу сохранить значение для «результата 2»? Я совсем новичок в кипарисе. Спасибо за вашу помощь

 it('My function', function()
{        
        var tkname =''
        cy.get('tr:nth-child(1) td:nth-child(3) div div div div p').then(coiname =>
        {
             tkname = Cypress.$(coiname).text()   
             //result 1
             cy.log(tkname)    
        })
        //result 2
        cy.log(tkname)
})
 

Ответ №1:

Команды асинхронны, поэтому в данный момент вам необходимо получить доступ внутри a .then() // result 2 .

 const tkname =''

cy.get('tr:nth-child(1) td:nth-child(3) div div div div p').then(coiname => {
  tkname = coiname.text()   
  //result 1
  cy.log(tkname)    
})
.then(() => {
  //result 2
  cy.log(tkname)
})

cy.log(tkname)  // this log already used the value of tkname, 
                // but it's still empty at this point
 

Из-за этого требования нет необходимости в «глобальной» переменной, вы можете вернуть значение с первого then() , и оно будет передано дальше.

 cy.get('tr:nth-child(1) td:nth-child(3) div div div div p').then(coiname => {
  return coiname.text()   
})
.then(tkname => {
  cy.log(tkname)
})
 

У Cypress также есть псевдонимы для установки своего рода глобального значения, но доступ к нему по-прежнему осуществляется внутри .then()

 cy.get('tr:nth-child(1) td:nth-child(3) div div div div p').then(coiname => {
  cy.wrap(coiname.text())
    .as('tkname')           // alias to use value anywhere in the same test
})

cy.get('@tkname').then(tkname => {
  cy.log(tkname)
})