我目前正在使用node+nightwatch+selenium进行自动化。我遇到了一个场景:
我在守夜人中将一个数组定义为全局数组:
开发.js
'checkforLink':{
link1:"Some Xpath 1",
link1:"Some Xpath 2",
link1:"Some Xpath 3",
link1:"Some Xpath 4"
},
在自定义命令中的自定义 js 脚本中,我正在执行一个for
循环以从全局变量中获取此链接:
exports.command = function(callback) {
browser = this;
var data = browser.globals;
console.log("Before all loop");
for(var menu_link in data.checkforLink) {
linkss1 = data.checkforLink.link1; // returns `Some Xpath 1`
reqvar = data.mainMenuLink.menu_link; // Even though menu_link have value as link1, reqvar is undefined
browser.click('######') // Click the path
}
return this;
};
当你运行for(var menu_link in data.checkforLink)
时,变量'menu_link'将是一个字符串。
若要从具有字符串的对象获取属性,请使用"object[string]"语法。试试data.mainMenuLink[menu_link];
只要 data.mainMenuLink.link1 存在,这应该有效。
我注意到在您的问题中,所有属性都具有值"link1"。希望它们是代码中的不同属性名称。
我不确定您的实际问题是否仅与循环有关,或者您无法使用"var data = browser.globals"创建实例,因此您的变量数据没有 {} 值。如果是这种情况,请将您的 Dev.js 重命名为"globals.js",并在"nightwatch.json"中提供其作为键"globals_path"值的路径。