【发布时间】:2016-03-15 23:12:26
【问题描述】:
我正在尝试使用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;
});,它就可以工作。
它并不漂亮,但出于某种原因,它是唯一有效的东西……至少对我来说。
【问题讨论】:
标签: javascript angularjs protractor