从findElement获取元素数组(By.className())

时间:2016-01-30 04:55:29

标签: node.js selenium-webdriver

我正在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
}

1 个答案:

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