我尝试使用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;
});
即可。
它并不漂亮,但出于某种原因,它至少对我有用....至少对我来说。
答案 0 :(得分:0)
只是您不需要将预期条件函数包装到EC.and
中:
browser.wait(conditionFn, 5000);
答案 1 :(得分:0)
试试这个。
browser.wait(conditionFn () {
return url === 'http://www.angularjs.org';
}, 8000);