我正在node.js中为selenium编写一个脚本,该脚本将转到页面并获取某个css类的innerhtml并将它们存储在一个数组中。
var element = driver.findElement(By.className("hll"));
element.getInnerHtml().then(html){
//returns 1 of the elements html where I want multiples
}
答案 0 :(得分:5)
要检索多个元素的html,可以使用driver.findElements()
查找所有匹配元素。这将提供使用Promise
中的元素解析的Array
。
var pendingElements = driver.findElements(By.className('h11'))
pendingElements.then(function (elements) {
// ...
});
您需要遍历集合并请求每个元素的HTML。您可以使用Array
的{{3}}来创建getInnerHtml()
的承诺集合:
var pendingHtml = elements.map(function (elem) {
return elem.getInnerHtml();
});
要等待它们被解决,您可以将该集合传递给.map()
。
promise.all(pendingHtml).then(function (allHtml) {
// ...
});
注意,您需要参考Selenium的promise
。
var promise = require('selenium-webdriver').promise;
组合:
// ...
var promise = require('selenium-webdriver').promise;
var pendingElements = driver.findElements(By.className('h11'))
pendingElements.then(function (elements) {
var pendingHtml = elements.map(function (elem) {
return elem.getInnerHtml();
});
promise.all(pendingHtml).then(function (allHtml) {
// `allHtml` will be an `Array` of strings
});
});