Cypress Cucumber,如何在一个步骤中从页面获取数据并在另一个场景步骤中使用它
Cypress Cucumber, how Get to data from page in one step and use it another scenario step
下面是我的场景,在一个场景中,我从页面获取数据并将其作为别名保存在变量中。
然后我想在其他情况下使用相同的 variable/data 来输入输入 field.I' 使用 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);
});
});
因此,使用 Cucumber 预处理器的 Cypress 可以跨同一场景的多个步骤使用,也可以重叠场景。
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}`);
});
可以使用“别名”来完成。就像在赛普拉斯中一样。存储变量 .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)
})
下面是我的场景,在一个场景中,我从页面获取数据并将其作为别名保存在变量中。 然后我想在其他情况下使用相同的 variable/data 来输入输入 field.I' 使用 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);
});
});
因此,使用 Cucumber 预处理器的 Cypress 可以跨同一场景的多个步骤使用,也可以重叠场景。
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}`);
});
可以使用“别名”来完成。就像在赛普拉斯中一样。存储变量 .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)
})