Во-первых, в этом коде есть орфографические ошибки. «deferred» - с одним «f», поэтому вызов promise.deffer()
выдаст ошибку времени выполнения. Это должно быть .defer()
. Также rpotractor
написано с ошибкой. Ваш код даже не может быть запущен.
Во-вторых, вы используете anitpattern: нет необходимости создавать обещание / отсрочку, когда вы уже получаете объект обещания из browser.wait
. Просто верните это (или одно, возвращенное из цепочки then
).
Кроме того, return element
является неправильным возвращаемым значением. Он выполняется синхронно, поэтому до окончания ожидания цепочка then
срабатывает слишком рано. Вместо этого обязательно верните обещание, которое browser.wait
вернет.
Вы можете сделать что-то вроде этого:
var check_availibility = function(counter, totalCount, element){
if (counter <= totalCount) {
return browser.wait(function () {
return browser.wait(EC.visibilityOf(element), 2000)
// ^^^^^^
}).then(function () {
console.log('Element found.')
return true;
}).catch(function (err) {
return inprogressTab.click()
// ^^^^^^
.then(() => availableTab.click())
.then(() => check_availibility(counter+1 , totalCount, element))
})
} else {
return protractor.promise.rejected(false);
}
}
Обратите внимание, что JavaScript имеет собственное обещание поддержка начиная с EcmaScript2015, поэтому вместо использования protractor.promise
, вы можете просто использовать Promise
.