使用量角器时如何从内部函数中获取值
How to get value from inner function when using Protractor
我正在尝试 return 作为按钮集合一部分的按钮的索引值。我花了很多时间审查闭包,但由于这是量角器,所以有些信息似乎并不一致。这是我目前的位置:
我将按钮列表收集到 arrayElement - [button1, button2, button3]。
我有一个目标元素...即 button2
如果我要查找的按钮与我的目标元素匹配,我需要索引。
这是我的代码:
var targetComponent = 'buttons2';
var buttonIndex;
var components;
browser.actions().mouseMove(homePage.componentIcon).perform();
components= homePage.gatherComponents();
buttonIndex = getIndex();
function getIndex () {
components.each(function (component, compIndex) {
component.getText().then(function (name) {
if (name === targetComponent) {
return compIndex;
}
});
});
}
如果确实需要索引,可以用map()
解决:
function getIndex () {
return components.map(function (component, compIndex) {
return {
text: component.getText(),
index: compIndex
};
}).then(function (results) {
for (var i = 0; i < results.length; i++) {
if (results[i].text === targetComponent) {
return results[i].index;
}
}
});
}
但是,如果您需要按文本过滤掉实际按钮,这是 filter()
:
的一个很好的用例
function getButton(targetComponent) {
return components.filter(function (component) {
return component.getText().then(function (text) {
return targetComponent === text;
});
}).first();
}
我正在尝试 return 作为按钮集合一部分的按钮的索引值。我花了很多时间审查闭包,但由于这是量角器,所以有些信息似乎并不一致。这是我目前的位置:
我将按钮列表收集到 arrayElement - [button1, button2, button3]。 我有一个目标元素...即 button2
如果我要查找的按钮与我的目标元素匹配,我需要索引。
这是我的代码:
var targetComponent = 'buttons2';
var buttonIndex;
var components;
browser.actions().mouseMove(homePage.componentIcon).perform();
components= homePage.gatherComponents();
buttonIndex = getIndex();
function getIndex () {
components.each(function (component, compIndex) {
component.getText().then(function (name) {
if (name === targetComponent) {
return compIndex;
}
});
});
}
如果确实需要索引,可以用map()
解决:
function getIndex () {
return components.map(function (component, compIndex) {
return {
text: component.getText(),
index: compIndex
};
}).then(function (results) {
for (var i = 0; i < results.length; i++) {
if (results[i].text === targetComponent) {
return results[i].index;
}
}
});
}
但是,如果您需要按文本过滤掉实际按钮,这是 filter()
:
function getButton(targetComponent) {
return components.filter(function (component) {
return component.getText().then(function (text) {
return targetComponent === text;
});
}).first();
}