Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从Selenium';将findElements合并到对象数组中_Node.js_Selenium_Q - Fatal编程技术网

Node.js 从Selenium';将findElements合并到对象数组中

Node.js 从Selenium';将findElements合并到对象数组中,node.js,selenium,q,Node.js,Selenium,Q,我在node.js中使用Selenium,我正在尝试执行以下操作 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.g

我在node.js中使用Selenium,我正在尝试执行以下操作

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
,但是我的实际程序需要在继续之前拥有所有的值。

没有必要用
all
聚合承诺,因为
findElements
返回一个承诺。您还需要使用
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);
        })
    };
});

好吧,所以我明白了为什么现在会发生,但不知道如何修复它
ele.getText()
返回承诺,即使
ele
WebElement
。然而,我仍然想要一个包含所有实际输出的数组,而不仅仅是承诺。
var map = webdriver.promise.map;

var elements = driver.findElements(By.xpath(my_xpath));

map(elements, e => e.getText()).then(function(texts) {
  console.log(texts);
});