我有以下设置代码
var ele = element(by.model(xpath));
var option = ele.isDisplayed().then(function(found) {
ele.all(by.tagName('option')).then(function(options) {
options.some(function(option) {
option.getText().then(function doesOptionMatch(text) {
if (text == data.trim()) {
logger.debug("PASS--" + data.trim() + "--option selected");
return "PASS"; //not working
}
if (text != data.trim())
logger.debug("FAIL--" + data.trim() + "--option is Not selected");
});
});
});
}, function(err) {
logger.debug("FAIL--Exception caught in verifyDropdownSelectedValue--" + err);
});
我希望控件不在写入return语句的循环中,但它不起作用并继续迭代。这是当我返回真值时没有退出的循环部分
options.some(function(option) {
option.getText().then(function doesOptionMatch(text) {
if (text == data.trim()) {
logger.debug("PASS--" + data.trim() + "--option selected");
return "PASS"; //not working
}
if (text != data.trim())
logger.debug("FAIL--" + data.trim() + "--option is Not selected");
});
});
答案 0 :(得分:1)
根据Array.some()
上的documentation,如果回调函数返回true,它将退出循环
some()为每个元素执行一次回调函数 数组,直到找到一个回调返回truthy值的数组(a 转换为布尔值时变为true的值)。如果这样的话 找到element,some()立即返回true。否则,一些() 返回false
你的some - callback function
不会返回true,实际上它不会返回任何内容。即使return "PASS"
值适用于函数doesOptionMatch
,也不适用于function(option)
,它是some()
的回调
我将代码更改为类似下面的内容,迭代getText()
值Array并在匹配时返回true。它按预期工作
var ele = element(by.tagName('select'));
var option = ele.isDisplayed().then(function(found) {
ele.all(by.tagName('option')).getText().then(function(textValues) {
textValues.some(function(textValue) {
if (textValue == data.trim()) {
logger.debug("PASS--" + data.trim() + "--option selected");
return true;
}
if (textValue != data.trim())
logger.debug("FAIL--" + data.trim() + "--option is Not selected");
})
})
});