0

代码 1

resultsBoard.findElements(By.css(mySelector)).then(function(elements) {
  elements.forEach(function(val, idx) {
    elements[idx].getText().then(function(text) {
        console.log(text);
    });
  });
});

代码 2

resultsBoard.findElements(By.css('mySelector')).then(function(elements) {
  for (var idx = 0; idx < elements.length; idx++) {
    elements[idx].getText().then(printText(text));
  }
});

代码 1 运行良好,可以检索与我的选择器匹配的所有元素的文本。代码 2 给了我一个

ReferenceError:未定义文本

有什么区别?为什么会这样?

4

2 回答 2

2

第二个片段添加了调用括号,它printText立即调用函数 ( ),期望text已经定义。这些括号不存在于第一个片段中。

elements[idx].getText().then(printText(text));

// is equivalent to...

var _result = printText(text);
elements[idx].getText().then(_result);

要提供命名函数作为参数,您只需将其名称用作变量:

elements[idx].getText().then(printText);
于 2016-05-07T19:16:07.443 回答
1

在第一个示例中:

elements[idx].getText().then(function(text) {
   console.log(text);
});

.then(function(text))部分实际上是为从 getText() 获得的数据命名(文本),因此您可以在下一行中使用它。在第二个示例中,您没有这样做。

所以你应该把你的第二个例子重写成这样的东西来让它工作:

resultsBoard.findElements(By.css('mySelector')).then(function(elements) {
  for (var idx = 0; idx < elements.length; idx++) {
    elements[idx].getText().then(function(text) {
      printText(text);
    });
  }
});
于 2016-05-07T19:18:59.120 回答