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

Jar*_*urg 4 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
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ski 8

要检索多个元素的html,您可以使用driver.findElements()查找所有匹配元素.这将提供一个Promise解析与元素中的元素Array.

var pendingElements = driver.findElements(By.className('h11'))

pendingElements.then(function (elements) {
    // ...
});
Run Code Online (Sandbox Code Playgroud)

您需要遍历集合并请求每个元素的HTML.你可以用Array's .map()来创建一个承诺集合getInnerHtml():

var pendingHtml = elements.map(function (elem) {
    return elem.getInnerHtml();
});
Run Code Online (Sandbox Code Playgroud)

要等待它们被解析,您可以将集合传递给promise.all().

promise.all(pendingHtml).then(function (allHtml) {
    // ...
});
Run Code Online (Sandbox Code Playgroud)

注意,你需要参考Selenium的promise.

var promise = require('selenium-webdriver').promise;
Run Code Online (Sandbox Code Playgroud)

联合:

// ...

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
    });
});
Run Code Online (Sandbox Code Playgroud)