为什么在 Protractor 中使用 evaluate()?

Why evaluate() in Protractor?

当我 运行 下面的代码片段时,我得到了以下输出。但我仍然不清楚为什么以及何时必须使用 evaluate() ....

    browser.get('https://weather.com/en-IN');

    $$("input[data-ng-change='goSearch()']").evaluate('placeholderText').then(function(value) {
        console.log(value);
      });

evaluate() 很少使用,但有一个独特的用途 - 它使您可以 访问您正在使用的当前元素的范围 。当您要查找的值未作为属性或元素的文本在 HTML 中公开时,通常需要这样做。

例如,当您在对象数组上有一个转发器并且您需要访问不在 HTML 中的某个对象 属性 时:

element.all(by.repeater("address in addresses")).filter(function (elm) {
     return elm.evaluate("address.zipCode").then(function (zipCode) {
          return zipCode === "10801";
     });
});