将Selenium的findElements中的承诺数组转换为对象数组

我正在使用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返回的driver.findElements的数组转换成一个值的数组,这样当我输出ele.getText() ,它将是一个值。 然而,在这种情况下, ele仍然是一个承诺。

我在这里错过了什么?

请注意,我认识到,对于上述例子,这是不必要的,我可以简单地使用ele.getText().then ,但我的实际程序需要所有的值之前继续。

因为findElements返回一个单一的承诺,所以findElementsall的承诺汇总在一起。 您还需要使用for循环而不是for-in循环遍历已parsing的数组:

 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); });