2016-07-14 3 views
0

私はnightwatchを使ってセレンテストを書いています。Nightwatchの実行メソッド

最終的に(nightwatchのカスタムコマンドで)値を返すコールバックが定義されています。問題は、私はconsole.log

var _someCallBack = function() { 
    var retValue = false; 
    browser 
     .variousNightwatchTasks() //place holder for other things 
     .execute(function (d) { 
      //Other custom work injected into the page 
      return $("span.header_title").length > 0; //I need this true|false 
     }, [], function(r) { 
      retValue = r.value; //has the changes; the following outputs as expected 
      console.log("r = {0} {1}".format(JSON.stringify(r), retValue)); 
    }); 

    //Other things ... 
    console.log(retValue); //always false which is the problem. 
    return retValue; //This return needs to execute. I must return the value. 
} 

内の値の変化を見るにもかかわらずretValue変数がその値を変更したことがない私は、これは私がこの問題を回避することができますので、どのように欠けているいくつかのJavaScriptニュアンスによるものであると確信しているということです何が起こっているのですか? (前者は後者よりも重要です)

更新:return retValueは必要なビットです。この関数は、ifステートメントの戻り値を使用するカスタムnightwatchコマンドへのコールバックで使用されます。

答えて

1

executeで注入された関数は非同期に実行され、_someCallBackが返ってきたときにまだ呼び出されていません。 結果を受け取るコールバック関数を提供することができます。

var _someCallBack = function(callback) { 
    browser 
     .variousNightwatchTasks() //place holder for other things 
     .execute(function (d) { 
      //Other custom work injected into the page 
      return $("span.header_title").length > 0; //I need this true|false 
     }, [], function(r) { 
      callback(r.value); 
     }); 
} 

_someCallBack(function(result){ 
    console.log(result); 
}); 
+0

これは何も解決しなかったのでしょうか? 'function(r){コールバック(r.value); } '部分は常にうまく働いた。それはそれ以降の価値を読んでいる。あなたの設定(ネストされたコールバック)でさえ、まったく同じ動作をもたらします。 '_someCallBack'から' r.value'を返す必要があります –

+0

'_someCallBack'から' r.value'を返すことはできません。もう1つの選択肢は、約束を返すことですが、呼び出し関数はそれを解決する必要があります。使用例を教えてください。 –

関連する問題