如何处理 findElements 结果?
How to handle findElements result?
代码 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: text is not defined
有什么区别?为什么会这样?
第二个代码片段添加了立即调用函数 (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);
在第一个例子中:
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);
});
}
});
代码 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: text is not defined
有什么区别?为什么会这样?
第二个代码片段添加了立即调用函数 (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);
在第一个例子中:
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);
});
}
});