Node.js WebdriverIO中的循环元素

Node.js WebdriverIO中的循环元素,node.js,selenium,selenium-webdriver,webdriver-io,Node.js,Selenium,Selenium Webdriver,Webdriver Io,我试图循环浏览链接列表,并对每个链接执行一些操作。我可以使用迭代元素,但是在forEach内部使用不会阻止forEach中的下一步,而且Selenium会发疯,因为它试图继续对不再在DOM中的元素执行操作 var q = require("q"); var webdriverio = require('webdriverio'); var options = { desiredCapabilities: { browserName: 'chrome' } };

我试图循环浏览链接列表,并对每个链接执行一些操作。我可以使用迭代元素,但是在forEach内部使用不会阻止forEach中的下一步,而且Selenium会发疯,因为它试图继续对不再在DOM中的元素执行操作

var q = require("q");
var webdriverio = require('webdriverio');
var options = {
    desiredCapabilities: {
        browserName: 'chrome'
    }
};

var clicks = [];

var runner = webdriverio.remote(options);

runner
    .init()
    .url('https://www.google.dk/search?q=burrito')
    .elements(".r").then(function(res){
        res.value.forEach(function(elem){
            console.log(elem);
            clicks.push(
                runner
                    .elementIdClick(elem.ELEMENT)
                    .pause(5000)
                    .back()
                    .pause(2000)
            );
        });

        return q.all(clicks);
    });
如何确保forEach中的下一次迭代在所有代码在forEach中执行之前不会运行


编辑:我应该提到我已经试过了。我用更具体的东西更新了我的代码示例

var runner = webdriverjs
.remote(options)
.init()
.url("http://www.google.com")

 // fetch elements
.elements('a', function(err, res){
    // iterate through elements
    res.value.forEach(function(elem) {
        // execute specific action
        runner.elementIdClick(elem.Element, function(err, res) {
             // callback logic here
             // ...
        })
    })
})

根据WebdriverIO的创建者,正确的方法是循环浏览一些链接并单击它们:

runner
    .init()
    .url('https://www.google.dk/search?q=burrito')
    .getText(".r").then(function(res){
        console.log(res);
        res.forEach(function(elem){
            console.log(elem);
            clicks.push(
                runner
                    .click('=' + elem)
                    .back()
            );
        });

        return q.all(clicks);
    });

您可能希望将异步包用于类似的用途


从元素列表中提取文本的简单方法

我能够为webelement列表提取文本,然后将其存储到数组中。
var strColumntext=[];
var table=browser.$(“//*/table/tbody”);
表.$$(“//tr/th”).map(函数(元素){
log(“提取的文本是:“+element.getText());
strColumntext.push(element.getText());
});

log(“打印所有文本:“+strColumntext”)
我应该提到我已经尝试了在github上可以找到的解决方案。我更新了我的问题。很抱歉
async.eachSeries(hugeArray, function iteratee(item, callback) {
    if (inCache(item)) {
        callback(null, cache[item]); // if many items are cached, you'll overflow
    } else {
        doSomeIO(item, callback);
    }
}, function done() {
    //...
});