2016-03-15 3 views
1

Я пытаюсь подождать браузер с browser.wait с пользовательским ExpectedCondition следующим образом ФункцияReturningANumber возвращает только число, а numberToCheck - это номер для проверки номера.нестандартное ожидаемое условие транспортира с ошибкой

var conditionFn = function() { 
    return functionReturningANumber(param) === numberToCheck; 
}; 

var condition = EC.and(conditionFn); 
browser.wait(condition, 50000); 

Но если я выполняю это, я получаю ошибку: fn(...).then is not a function, который в основном говорит, что он ожидает обещание. Я посмотрел документацию о ExpectedConditions и пример для пользовательских один такой:

// You can define your own expected condition, which is a function that 
// takes no parameter and evaluates to a promise of a boolean. 
var urlChanged = function() { 
    return browser.getCurrentUrl().then(function(url) { 
     return url === 'http://www.angularjs.org'; 
    }); 
}; 

И я не вижу, как здесь создается обещание. Я только вижу, что возвращается логическое значение, и в документации указано evaluates to a promise of a boolean, что еще более смущает меня.

Это выше, чтобы ждать ответа от API, это вызвано тем, что тест запускает бэкэнд-процесс, который затем должен ждать. Если есть лучший способ сделать это, я бы очень признателен за лучший способ.

Я использую транспортир 3.1.1.

Любая помощь действительно исправлена.

Edit:

я нашел способ решить эту проблему, по какой-то причине логичное решение по @alecxe не работает, даже если это имеет смысл:

var numberFound = 0; 
var done = false; 
var check = function() { 
    numberFound = functionReturnungANumber(param); 
    if (numberFound != numberToCheck) { 
     setTimeout(check, 4000); 
    } else { 
     done = true; 
    } 
}; 
check(); 
return done; 

Если добавить это функцию и получить возвращаемое значение в тесте, которое вызывает эту функцию, и добавить browser.wait(function() { return done; }); там, где он работает.

Это не красиво, но по какой-то причине это единственное, что работает .... для меня как минимум.

ответ

0

Это просто, что вам не нужно обернуть Ожидаемую функцию Condition в EC.and:

browser.wait(conditionFn, 5000); 
+0

Это не возвращает обещание, и я попытался это раньше, но теперь, если я что-то вроде этого: 'вара conditionFn = функция() { результата вара = functionReturningANumber (пары) === numberToCheck ; console.log (результат) результат возврата; }; browser.wait (conditionFn, 50000); ' он будет печатать' false' много раз, а затем просто выйти. Для тестирования я изменил, что это условие никогда не произойдет, но оно просто выходит, поскольку условие было бы выполнено. – Sheldan

+0

@ Шелдан, пожалуйста, посмотрите обновление - дикое предположение, но попробуйте. Благодарю. – alecxe

+0

Если я изменю его на это, он ничего не напечатает. Если я изменю его на 'conditionFn()', он выполнит, очевидно, так же, как и раньше, но только несколько раз, прежде чем он уйдет. Может быть, какой-то тайм-аут или количество казней, о которых вы, возможно, знаете? – Sheldan

0

Попробуйте это.

browser.wait(conditionFn() { 
    return url === 'http://www.angularjs.org'; 
}, 8000); 
+0

Является ли этот синтаксис даже правильным? – Sheldan

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