场景: 我们想测试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)还有其他更好的解决方案吗?
谢谢!
答案 0 :(得分:0)
我认为您可以通过cy.get来访问别名orderNumber
cy.get('@orderNumber')