t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

cypressio
javascript
Теги: #<Tag:0x00007fb2f9ac89e8> #<Tag:0x00007fb2f9ac87e0>

(Alex M) #1

Привет!

Помогите, пожалуйста. Решил попробовать 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 с той переменной?


(Dima Mayboroda) #2

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

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

или

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

#3

Привет!

Вероятно, такой подход не сочетается с архитектурой 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.

Вот тут (https://blog.servmask.com/8-tricks-i-learned-from-cypress/) в пункте 2 есть пример.


(Alex M) #4

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


#5

Опять же, мне кажется, что вот тут неплохо объяснено: https://www.cypress.io/blog/2019/01/03/stop-using-page-objects-and-start-using-app-actions/

Кроме того, вот неплохой доклад про то, почему не всегда стоит следовать “лучшим/привычным практикам” (это касательно PO): https://youtu.be/U6z2dK7MwmI?t=216

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