#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)
})