2

下面是我的场景,在一个场景中,我从页面获取数据并将其作为别名保存在变量中。然后我想在其他场景中使用相同的变量/数据来输入输入字段。我正在使用 Alias 但收到此错误。

cy.wait() 找不到注册别名:@Orderinfo。你还没有给任何东西起别名。

即使它正确地连接了。数据存储在 @Orderinfo 中,但在其他 sceanrio 步骤中不可访问。

Then("Get Data from page", () => {
  cy.get(".os-order-number").invoke("text").then(($Oid) => {
    let Order = $Oid.text();
    let Order_id = Order.replace(/[^0-9]/g, "");
    cy.wrap(Order_id).as("Orderinfo");
  });
});


Given("Go to Login", () => {
  cy.visit("https://dev.simplifyshopping.com/register/");
});

When("Paste variable here", () => {
  cy.wait(2000);
  cy.wait("@Orderinfo")
  cy.get("@Orderinfo")).then((Orderinfo) => {
    console.log(Orderinfo);
    cy.get("#id_email").type(Orderinfo);
  });
});
4

2 回答 2

3

因此,使用 Cucumber Preprocessor 的赛普拉斯可以跨同一场景的多个步骤使用,以及场景重叠。

1. 在同一场景的多个步骤中使用值

参考问题中的示例,Order_Id可以在步骤之外定义,因此可以从所有步骤在全局范围内访问。如果我正确理解了代码,它将是这样的(可能不必要的代码被注释掉了):

let Order_id;

Then("Get Data from page", () => {
  cy.get(".os-order-number").invoke("text").then(($Oid) => {
    let Order = $Oid.text();
    Order_id = Order.replace(/[^0-9]/g, "");
    // cy.wrap(Order_id).as("Orderinfo");
  });
});


Given("Go to Login", () => {
  cy.visit("https://dev.simplifyshopping.com/register/");
});

When("Paste variable here", () => {
  cy.wait(2000);
  // cy.wait("@Orderinfo")
  // cy.get("@Orderinfo")).then((Orderinfo) => {
  //  console.log(Orderinfo);
  //  cy.get("#id_email").type(Orderinfo);
  // });

  console.log(Order_id);
  cy.get("#id_email").type(Order_id);
});

2. 跨场景使用值(跨测试保持状态)

例如,为了使某些值在不同场景的执行中可访问,helper.js可以创建一个包含以下代码的文件:

export const stateStore = {};

在您的步骤定义文件中,您可以导入stateStore并使用您喜欢的值填充它:

import { Given, When } from 'cypress-cucumber-preprocessor/steps';
import { stateStore } from '../helpers';

// step used in first scenario
Given('some value is made available in scenario 1', () => {
  stateStore.someValue = 'this is a value';
});

// step used in second scenario
When('this value can be used in another step of scneario 2', () => {
  console.log(`Print some value: ${stateStore.someValue}`);
});
于 2022-02-13T16:14:54.373 回答
0

它可以使用“别名”来完成。就像在柏树中一样。存储变量 .as("vaiableName"),然后在所需的函数中以 this.variableName 访问它。它可能是这样的。

Then("Get Data from page", function () {
    cy.get(".os-order-number").then($Oid => {
        const Order = $Oid.text()
        const Order_id = Order.replace(/[^0-9]/g, "")
        cy.log("inside Then function" + Order_id)
        cy.wrap(Order_id).as("wrapText")
    })
})

Given("Go to Login", function () {

    cy.log(this.wrapText)
})
于 2022-02-21T01:11:36.437 回答