Selenium webdriver - 解决多个承诺

时间:2017-06-26 23:49:13

标签: javascript node.js selenium selenium-webdriver promise

下面的代码有效,除了我不想在解析时打印出结果,我希望能够以JSON格式构建它们。 我想为此,我需要等待所有的承诺得到解决,但我不知道如何!

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;

    var driver = new webdriver.Builder()
        .forBrowser('chrome')
        .build();

    driver.get('www.example.com');
    driver.sleep(2000);

    driver.findElements(By.css('.listing')).then(function(resWraps){
        for (var i=0; i<resWraps.length; i++) {
            resWraps[i].findElement(By.css('.title a')).getAttribute("innerHTML").then(function(title){
                console.log(title);
            });
            resWraps[i].findElement(By.css('.price')).getAttribute("innerHTML").then(function(price){
                console.log(price);
            });    
        }
    });

所以,我得到一份清单。然后我想在列表的每个元素中找到多个元素。但我不知道如何等待所有的承诺得到解决,以便制作我的最终JSON阵列。

1 个答案:

答案 0 :(得分:1)

Promise.all解析数组,因此您需要将元素推送到数组,然后将其传递给Promise.all函数。类似的东西:

const promiseArray = []
for (var i=0; i<resWraps.length; i++) {
   promiseArray.push(resWraps[i].findElement(By.css('.title a')).getAttribute("innerHTML"));
}

return Promise.all(promiseArray)
   .then(resolvedList){
 // do something with resolvedList
}

不确定此代码是否会运行但是这是一个示例,如果您查看Promises的文档,那么传递给Promise.all的参数必须是可迭代的。

希望这有帮助