Nightwatch 如何使用从一个函数到另一个函数的局部变量
Nightwatch How to use local variable from one function to another
我想使用局部变量传递给另一个函数或与任何变量进行比较。示例:
browser
.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
browser
.pause(500)
.getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result){
console.log('++++++++++++++',result.value);
let numb1 = result.value;
numb = numb1.match(/\d/g);
numb = numb1.join("");
console.log("value=", numb1);
return numb1;
})
})
.element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
console.log(present);
if (present.status == 0) {
//arrange
browser
.pause(500)
.getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {
console.log("string", result.value);
let numb = result.value;
numb = numb.match(/\d/g);
numb = numb.join("");
console.log("value=", numb);
return numb;
})
}
})
我想比较 numb/numb1 或计算两者的总和。
好吧,如果您想保持测试结构不变(非常可疑!),那么为什么不声明一些测试文件全局变量?
let numb, numb1;
browser
.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
browser.pause(500)
.getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result) {
numb1 = result.value;
// > do more stuff here if necessary <
});
})
.element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
console.log(present);
if (present.status == 0) {
browser.pause(500)
.getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {
numb = result.value;
console.log(`numb & numb1 values: ${numb} & ${numb1}`);
// > do more stuff with num & numb1 if necessary <
});
}
});
话虽这么说... 更好的方法是分解您的大步骤并将逻辑提取为单个-目的函数,因此您可以使用:
考虑到您当前的设置,让我们考虑添加以下 自定义命令 以提取您的 num1
:
❒ getNumb1.js(应位于 test/custom_commands/
):
exports.command = function(callback) {
this.perform((done) => {
this.api.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, () => {
this.api.pause(500);
this.api.getText("//div[@class='col-xs-7 alignR uppercase']//strong", (result) => {
let numb1 = result.value;
// > do some other stuff here if necessary <
callback(numb1);
});
});
});
};
类似地,添加第二个自定义命令文件 (getNumb.js),它将 return numb
的值。 然后,在你的测试文件中使用这两个并进行数据操作,或数据检查(断言) 如你所愿:
let numb = browser.getNumb();
let numb1 = browser.getNumb1();
// > do something with numb & numb1 here <
❖ !Note: The examples given above are purely didactical! I don't advise
creating custom_commands
containing test-specific logic. Only general-purpose and/or utility methods (e.g: closeGDPR, addCookie, getHttpCode, etc.) should reside in the custom_commands
folder.
因此,在当前设置中,最好添加诸如getNumb
& getNumb1
在页面对象的 commands 部分。
我想使用局部变量传递给另一个函数或与任何变量进行比较。示例:
browser
.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
browser
.pause(500)
.getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result){
console.log('++++++++++++++',result.value);
let numb1 = result.value;
numb = numb1.match(/\d/g);
numb = numb1.join("");
console.log("value=", numb1);
return numb1;
})
})
.element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
console.log(present);
if (present.status == 0) {
//arrange
browser
.pause(500)
.getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {
console.log("string", result.value);
let numb = result.value;
numb = numb.match(/\d/g);
numb = numb.join("");
console.log("value=", numb);
return numb;
})
}
})
我想比较 numb/numb1 或计算两者的总和。
好吧,如果您想保持测试结构不变(非常可疑!),那么为什么不声明一些测试文件全局变量?
let numb, numb1;
browser
.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
browser.pause(500)
.getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result) {
numb1 = result.value;
// > do more stuff here if necessary <
});
})
.element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
console.log(present);
if (present.status == 0) {
browser.pause(500)
.getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {
numb = result.value;
console.log(`numb & numb1 values: ${numb} & ${numb1}`);
// > do more stuff with num & numb1 if necessary <
});
}
});
话虽这么说... 更好的方法是分解您的大步骤并将逻辑提取为单个-目的函数,因此您可以使用:
考虑到您当前的设置,让我们考虑添加以下 自定义命令 以提取您的 num1
:
❒ getNumb1.js(应位于 test/custom_commands/
):
exports.command = function(callback) {
this.perform((done) => {
this.api.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, () => {
this.api.pause(500);
this.api.getText("//div[@class='col-xs-7 alignR uppercase']//strong", (result) => {
let numb1 = result.value;
// > do some other stuff here if necessary <
callback(numb1);
});
});
});
};
类似地,添加第二个自定义命令文件 (getNumb.js),它将 return numb
的值。 然后,在你的测试文件中使用这两个并进行数据操作,或数据检查(断言) 如你所愿:
let numb = browser.getNumb();
let numb1 = browser.getNumb1();
// > do something with numb & numb1 here <
❖ !Note: The examples given above are purely didactical! I don't advise creating
custom_commands
containing test-specific logic. Only general-purpose and/or utility methods (e.g: closeGDPR, addCookie, getHttpCode, etc.) should reside in thecustom_commands
folder.
因此,在当前设置中,最好添加诸如getNumb
& getNumb1
在页面对象的 commands 部分。