2016-07-14 3 views
0

Я использую nightwatch для написания тестов на селен (как и вы).Метод выполнения Nightwatch

У меня есть обратный вызов, который я хочу, в конечном счете, вернуть значение (пользовательская команда в nightwatch). Проблема заключается в том, что переменная retValue никогда не меняет своего значения, даже если я вижу изменение значения внутри 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. 
} 

Я уверен, что это связано с какой-то нюанс яваскрипта я отсутствующего так, как я могу обойти эту проблему и что происходит? (Первое более важно, чем последнее.)

Обновление:return retValue - необходимый бит. Эта функция используется в обратном вызове для пользовательской команды nightwatch, которая использует возвращаемое значение в операторе if.

ответ

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

Я боюсь, что это ничего не решило. Функция (r) {обратный вызов (r.value); } 'часть всегда работала нормально. После этого он считывает значение. Даже в вашей конфигурации (вложенный вызов) получается то же самое поведение. Мне нужно вернуть 'r.value' из' _someCallBack' –

+0

Невозможно вернуть 'r.value' из' _someCallBack' и никогда не будет. Другой альтернативой было бы вернуть обещание, но вызывающая функция должна будет решить эту проблему. Можете ли вы привести пример использования? –

Смежные вопросы