将函数传递给 nighmarejs evaluate()

Pass a function to nighmarejs evaluate()

我试图传递一个在 nightmarejs 评估语句中调用的函数和 return 一个值。像这样:

var thisfunction = function() {
    var tags = [];
    var list = document.querySelector('#selectSomething');
    list.forEach(function(item) {
        tags.push({
            name: item.attributes[1].value,
            id: item.attributes[2].value
        })
    });
    return tags;
};

return nightmare
    .goto('url')
    .wait('#something')
    .evaluate(function(getValues) {
        getValues();
    }, thisfunction)
    .then(function(list) {
        console.log(list);
    })

我正在 ReferenceError: getValues is not defined。在不同的地方用 return 语句尝试了不同的方法,但没有成功。

如何做到这一点?

谢谢!

我想您可以简单地编写以下代码:

var thisfunction = function() {
    var tags = [];
    var list = document.querySelector('#selectSomething');
    list.forEach(function(item) {
        tags.push({
            name: item.attributes[1].value,
            id: item.attributes[2].value
        })
    });
    return tags;
};

return nightmare
    .goto('url')
    .wait('#something')
    .evaluate(thisfunction)
    .then(function(list) {
        console.log(list);
    })

行为背后的原因

您可以将 strings/numbers 作为参数传递,但不能传递 functions/object,因为它们在传递给评估方法之前已序列化。

你可以看看解释here

还有 ticket on Github 位有类似经历的用户。