Cypress - как сохранить значение текста Елемента в переменную

Привет!

Помогите, пожалуйста. Решил попробовать Cypress.
Навалял ПО структуру. Все работает, кроме одно момента - не могу сохранить значение текста на одной странице (цена), для сравнения на другой странице.
Документация предлагает 2 решения:
cy.get(locator).invoke('text').as('varName')
cy.get(locator).then($el => $el.get(0).innerText)

Я пробовал глобальные переменные с переназначением в then.
Пробовал возвращать значения и сохранить все в переменную.
Пробовал кучу всего. Правда.
Но не как не получилось получить значения.

Или Cypress никак нельзя запихнуть в ПО?

Буду благодарен за любую помощь.

P.s.: invoke('text').as('varName') можно потом использовать через this.varName, но this у меня - класс, на инстансе которого, конечно же, нет такого значения. Может можно достучаться до объекта Cypress с той переменной?

А если попробовать просто через метод .text()
или стандартный jQuery .innerText

cy.get('div').should(($div) => {
  const text = $div.text()
})

или

cy.get('div').should(($div) => {
  const text = $div.get(0).innerText
})
1 лайк

Привет!

Вероятно, такой подход не сочетается с архитектурой Cypress.
И, вероятно, это не всегда нужно…

Since Cypress chains are asynchronous and they wait for each other, you can’t store an element object into a variable. Instead, you need to use aliases for that.

Вот тут (8 Tricks I Learned From Cypress) в пункте 2 есть пример.

1 лайк

Спасибо за помощь :slight_smile:
@sant0ku, а какой, в таком случае, паттерн подходит для Cypress. Не писать же спагетти с вложеностями в тестах?! Или я чего-то не понимаю.

Опять же, мне кажется, что вот тут неплохо объяснено: Application Actions: Use Them Instead of Page Objects

Кроме того, вот неплохой доклад про то, почему не всегда стоит следовать “лучшим/привычным практикам” (это касательно PO): 2019.09.24 Андрей Солнцев - 10 причин моей ненависти - YouTube

NB! Конкретно по теме смотреть до 19:26, но я бы рекомендовал посмотреть видео целиком, поскольку довольно интересно. Разве что про BDD спорно…

1 лайк