下面的代码有效,除了我不想在解析时打印出结果,我希望能够以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阵列。
答案 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的参数必须是可迭代的。
希望这有帮助