将 Selenium 的 findElements 中的承诺数组转换为对象数组
Converting an array of promises from Selenium's findElements into an array of objects
我正在将 Selenium 与 node.js 一起使用 我正在尝试执行以下操作
var driver = *webdriver instance*;
var my_xpath = *an xpath string*;
var ele;
Q.all(driver.findElements(webdriver.By.xpath(my_xpath))).then(function(elements) {
for (ele in elements) {
console.log(ele.getText());
};
}
我的印象是 Q.all
会将 driver.findElements
返回的承诺数组转换为值数组,这样当我输出 ele.getText()
时它就是一个值。然而在这种情况下 ele
仍然是一个承诺。
我在这里错过了什么?
请注意,对于上面的示例,我意识到这是不必要的,我可以简单地使用 ele.getText().then
,但我的实际程序需要在继续之前拥有所有值。
由于 findElements
returns 是一个单一的承诺,因此无需将 all
的承诺聚合在一起。您还需要使用 for
循环而不是 for-in
循环来迭代已解析的数组:
driver.findElements(webdriver.By.xpath(my_xpath)).then(function(elements) {
for (var i = 0; i < elements.length; i++) {
elements[i].getText().then(function(text) {
console.log(text);
})
};
});
您还可以使用 map
直接获取包含每个元素文本的数组:
var map = webdriver.promise.map;
var elements = driver.findElements(By.xpath(my_xpath));
map(elements, e => e.getText()).then(function(texts) {
console.log(texts);
});
我正在将 Selenium 与 node.js 一起使用 我正在尝试执行以下操作
var driver = *webdriver instance*;
var my_xpath = *an xpath string*;
var ele;
Q.all(driver.findElements(webdriver.By.xpath(my_xpath))).then(function(elements) {
for (ele in elements) {
console.log(ele.getText());
};
}
我的印象是 Q.all
会将 driver.findElements
返回的承诺数组转换为值数组,这样当我输出 ele.getText()
时它就是一个值。然而在这种情况下 ele
仍然是一个承诺。
我在这里错过了什么?
请注意,对于上面的示例,我意识到这是不必要的,我可以简单地使用 ele.getText().then
,但我的实际程序需要在继续之前拥有所有值。
由于 findElements
returns 是一个单一的承诺,因此无需将 all
的承诺聚合在一起。您还需要使用 for
循环而不是 for-in
循环来迭代已解析的数组:
driver.findElements(webdriver.By.xpath(my_xpath)).then(function(elements) {
for (var i = 0; i < elements.length; i++) {
elements[i].getText().then(function(text) {
console.log(text);
})
};
});
您还可以使用 map
直接获取包含每个元素文本的数组:
var map = webdriver.promise.map;
var elements = driver.findElements(By.xpath(my_xpath));
map(elements, e => e.getText()).then(function(texts) {
console.log(texts);
});