Как сохранить и повторно использовать динамический DOM-контент позже в тестовом примере - PullRequest
0 голосов
/ 17 апреля 2019

Сценарий: Мы хотим проверить E2E расчет цены нашего интернет-магазина (продажи товаров по индивидуальному заказу).Поэтому мы настраиваем продукт в интерфейсе пользователя и проверяем цену на различных этапах (страница продукта, корзина, оформление заказа и т. Д.).Когда заказ размещен, пользователь перенаправляется на страницу успеха, на которой также отображается номер заказа.

После размещения заказа мы также хотим проверить цену в бэкэнде продавца на основе номера заказа, который мы получили отстраница успеха

Таким образом, мы хотим как-то сохранить номер oder для последующего использования в бэкэнде.

Мы хотим протестировать все это в одном тестовом примере - хотя мы знаем, что рекомендуется тестироватьпо крайней мере, интерфейс и бэкэнд в отдельных тестовых случаях.

Проблема:

Следующий код работает нормально:


describe('Check prices on frontend and backend', () => {

    it("can calculate correct prices on frontend and backend", function(){

        cy.visit("https://www.example.com/product/")

        ...

        // on success-page
        cy.get('#ordernumber').invoke("text").as("orderNumber");

        // go to backend
        cy.visit('https://www.example.com/backend')

        ...

        cy.get('#order_table #ordernumberInput').then(($orderInput) => {
            this.orderNumber = this.orderNumber.trim()
            cy.wrap($orderInput).type(this.orderNumber)
        })

        ...
    })
})

Но как только мыинкапсулировать некоторый код в функцию, он перестает работать с «this.orderNumber не определен»

describe('Check prices on frontend and backend', () => {

    it("can calculate correct prices on frontend and backend", function(){

        cy.visit("https://www.example.com/product/")

        ...

        // on success-page
        cy.get('#ordernumber').invoke("text").as("orderNumber");

        // go to backend
        cy.visit('https://www.example.com/backend')

        ...

        function accessOrder() {
            ...
            cy.get('#order_table #ordernumberInput').then(($orderInput) => {
                this.orderNumber = this.orderNumber.trim()
                cy.wrap($orderInput).type(this.orderNumber)
            })
            ...
        }

        accessOrder();
        ...
    })
})

Вопросы:

1) Как это исправить?

2) Есть ли другое лучшее решение для этого?

Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2019

Я думаю, что вы можете получить доступ к своему псевдониму orderNumber по cy.get, как это

cy.get('@orderNumber')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...