我正在中练习UI测试https://www.saucedemo.com/使用Cypress,它是一个演示电子商务网站。我使用standard_user和secret_sauce作为密码登录,如第一页所示
我想知道如果选择了产品名称,如何收集它,这样我就可以检查购物车是否包含正确的产品
我现在的代码是
it("select 2 products", () => {
cy.get(':nth-child(1) > .pricebar > .btn_primary').click();
cy.get(':nth-child(1) > .pricebar > .btn_secondary')
.should("contain","REMOVE")
cy.get(':nth-child(4) > .pricebar > .btn_primary').click();
cy.get(':nth-child(4) > .pricebar > .btn_secondary')
.should("contain","REMOVE")
cy.get('.fa-layers-counter')
.should("contain","2")
});
it("check cart", () => {
cy.get('path').click();
cy.get('.subheader').should("contain","Your Cart");
cy.get('.inventory_item_name').should("have.length",2)
.should("contain","Sauce Labs Fleece Jacket");
cy.get('.inventory_item_price').should("have.length",2)
.should('contain',"49.99")
});
但正如我上面提到的,如果inventory_item包含带文本remove的按钮,我想收集名称,我该怎么做?
请参阅Cypress文档中的invoke命令和别名。
如果库存项目的名称在按钮上,您可以使用:
it("select 2 products", () => {
cy.get(':nth-child(1) > .pricebar > .btn_primary').click()
.invoke('val').as('inventoryItemName0');
cy.get(':nth-child(1) > .pricebar > .btn_secondary')
.should("contain","REMOVE")
cy.get(':nth-child(4) > .pricebar > .btn_primary').click()
.invoke('val').as('inventoryItemName1');
cy.get(':nth-child(4) > .pricebar > .btn_secondary')
.should("contain","REMOVE")
cy.get('.fa-layers-counter')
.should("contain","2")
});
it("check cart", () => {
cy.get('path').click();
cy.get('.subheader').should("contain","Your Cart");
cy.get('.inventory_item_name').should("have.length", 2).each((element, index) => {
cy.get("@inventoryItemName" + index).then(name => {
cy.wrap(element).should("include.text", name);
});
});
cy.get('.inventory_item_price').should("have.length",2)
.should('contain',"49.99")
});
Invoke命令的参数取决于库存项名称是作为按钮的值还是作为文本:
如果html元素类似于<button value="name"/>
,请使用.invoke('val')
。
否则,如果与<button>name</button>
类似,请使用invoke('text')
。