2016-09-07 41 views
0

我需要使用(类型,名称)或任何其他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

我已经试过,但评估()不似乎喜欢两个参数。 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

您可以使用protractor.promise.all()方法一次解析多个promise。上述方法的参数是传递promise数组,它会给出th e输出为阵列。在你的情况下,你可以使用类似下面的东西,

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) { 
//... 
}); 
+0

非常感谢这工作完美! – goldjb