使用评估

时间:2016-09-07 15:01:04

标签: angularjs protractor

我需要使用(类型,名称)或我的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) {
        //...

    });

});

1 个答案:

答案 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) {
//...
});