nightwatch.js从测试之外的函数返回值

时间:2016-03-22 13:22:24

标签: function return nightwatch.js

我无法将测试之外的某些代码移动到需要返回值的函数中。

以下是我的测试文件代码的一部分

function getCountOfTopics(browser){
    var count;
    browser.getText('@sumTopics',
        function(result){
            count = result.value;
            console.log(result.value);
        }
    );
    return count;
};

module.exports = {    
    
    'Create article' : function(browser){
        var noOfThreadsByInlineCode, noOfThreadsByFunction;
        
        browser.getText('@sumTopics',
            function(result){
                noOfThreadsByInlineCode = result.value;
            }
        );

        noOfThreadsByFunction = getCountOfTopics(browser);

        browser.end();
    }
}

现在,变量noOfThreadsByInlineCode确实获取DOM中的值,但变量noOfThreadsByFunction未定义。控制台确实打印了正确的值,因此该函数确实从DOM中获取了正确的值。

我很感激帮助更新函数,以便我获得返回的值。

2 个答案:

答案 0 :(得分:0)

你返回变量' count'在回调之外,这就是原因。你可以看一下这个话题How to return value from an asynchronous callback function?

function getCountOfTopics(browser){
var count;
browser.getText('@sumTopics',
    function(result){
        count = result.value;
        console.log(result.value);
       ///  result.value is available in this callback.
    }
);

你想用'值'?

做什么?

ps:不记得custom_command。我认为这对这个问题非常有帮助。

答案 1 :(得分:0)

单词答案是 Asynchronisity 。代码不会等待你的回调完成,这就是Node JS的功能。

如果您迫切需要回调内容,可以将此变量写入文件,然后在代码中的任何位置访问它。这是一个解决方法:

在文件中保存内容:

var fs = require('fs');

iThrowACallBack(function(response){
  fs.writeFile('youCanSaveData.txt', this.response, function(err) {
    if (err) throw err;
    console.log('Saved!');
    browser.pause(5000);
  });
});

访问其他地方:

iAccessThefile(){
   response = fs.readFileSync('youCanSaveData.txt').toString('utf-8');
}

希望它有所帮助。