我需要使用(类型,名称)或我的ngrepeat的任何其他组合过滤带有多个变量的转发器。
一个变量
我使用一个变量成功完成了这个:
element.all(by.repeater("org in orgs")).filter(function (elm) {
return elm.evaluate("org.type").then(function (orgType) {
if (orgType === "ORG_TYPE_FOO") {
return orgType;
}
});
}).then(function (elms) {
//...
});
尝试1
我试过这个但是evaluate()似乎不喜欢两个参数。 orgName始终返回undefined
element.all(by.repeater("org in orgs")).filter(function (elm) {
return elm.evaluate("org.type", "org.name").then(function (orgType, orgName) {
if (orgType === "ORG_TYPE_FOO" && orgName === "NAME1") {
console.log(orgType + " ------ " + orgName);
return orgType;
}
});
}).then(function (elms) {
//...
});
尝试2
我想我可以在第一次过滤+评估之后再次过滤榆树但我似乎无法让它工作,因为榆树是ElementArrayFinder
element.all(by.repeater("org in orgs")).filter(function (elm) {
return elm.evaluate("org.type").then(function (orgType) {
if (orgType === "ORG_TYPE_FOO") {
return orgType;
}
});
}).then(function (elms) {
elms.filter(function (elm) {
return elm.evaluate("org.name").then(function (orgName) {
if (orgName === "NAME1") {
return orgName;
}
});
}).then(function (elms) {
//...
});
});
答案 0 :(得分:0)
您可以使用protractor.promise.all()
方法一次解析多个promises。上述方法的参数是传递promises数组,它会将输出作为数组。在您的情况下,您可以使用如下所示的内容,< / p>
element.all(by.repeater("org in orgs")).filter(function (elem) {
return protractor.promise.all([elem.evaluate("org.type"),elem.evaluate("org.name")]).then(function (resultArray) {
return (resultArray[0] === "ORG_TYPE_FOO" && resultArray[1] === "NAME1")
}
});
}).then(function (elms) {
//...
});