我无法将测试之外的某些代码移动到需要返回值的函数中。
以下是我的测试文件代码的一部分
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中获取了正确的值。
我很感激帮助更新函数,以便我获得返回的值。
答案 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');
}
希望它有所帮助。