Я тестирую интернет-магазин.
Я пытаюсь убедиться, что если вы купите один товар, цена будет такой же, как окончательная цена покупки.
Если я покупаю только 1 конкретный товар (количество не имеет значения), то окончательная цена = держатель цены.
Как я могу убедиться, что цена равна? Я не могу использовать .should("have.text", конкретный текст), потому что число является динамическим.
Я нахожу оба элемента и записываю их текст. Я пытался их сравнить, но результаты показывают ошибку: FinalPrice не определен. Это потому, что константа определена в функции раньше?
Наверное, мне придется поступить по-другому. Вы видите лучшее решение?
cy.log("Log Final Price")
cy.get(".final-price")
.find("strong")
.then(($strong) => {
const FinalPrice = $strong.text()
cy.log(FinalPrice);
})
cy.log("Log Price Holder")
cy.get(".price-holder")
.then(($span) => {
const PriceHolder = $span.text()
cy.log(PriceHolder)
})
cy.log("Price Equality")
cy.get(FinalPrice).should("be.equal", PriceHolder)





Вы бы сохранили промежуточные данные в псевдонимы
// select an item
cy.get(".price-holder")
.invoke('text')
.as('priceHolder')
cy.get(".final-price")
.find("strong")
.invoke('text')
.as('final')
cy.get('@final').then((final) => {
cy.get('@priceHolder').then((priceHolder) => {
expect(parseFloat(final)).to.eq(parseFloat(priceHolder))
})
})
Конечно, если нет промежуточных шагов, вы можете просто вложить запросы.
cy.get(".final-price")
.find("strong")
.invoke('text')
.then(text => parseFloat(text))
.then((final) => {
cy.get(".price-holder")
.invoke('text')
.then(text => parseFloat(text))
.should('eq', final)
})
но обычно вам придется выполнять какие-то манипуляции со страницами, например, выбирать товары для корзины покупок, поэтому использование псевдонимов — это способ пройти такой тест.