量角器自定义预期条件失败,错误为

时间:2016-03-15 23:12:26

标签: javascript angularjs protractor

我尝试使用browser.wait等待浏览器,并使用这样的自定义ExpectedCondition FunctionReturningANumber只返回一个数字,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。

任何帮助都非常值得赞赏。

编辑:

我找到了解决这个问题的方法,由于某种原因@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; });即可。

它并不漂亮,但出于某种原因,它至少对我有用....至少对我来说。

2 个答案:

答案 0 :(得分:0)

只是您不需要将预期条件函数包装到EC.and中:

browser.wait(conditionFn, 5000);

答案 1 :(得分:0)

试试这个。

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