稍后在测试案例中如何保存和重用动态DOM内容

时间:2019-04-17 13:32:59

标签: javascript node.js cypress

场景: 我们想测试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 :(得分:0)

我认为您可以通过cy.get来访问别名orderNumber

cy.get('@orderNumber')