我在我的一些量角器测试中调用了一个函数,它执行的某些任务超过了量角器的默认超时(似乎是60秒)
我已经读过您应该可以使用" jasmine.DEFAULT_TIMEOUT_INTERVAL"更改默认超时,但是使用以下代码,超时仍然发生在我设置的4分钟之前。由于我希望将来重用这个测试部分,我不能简单地将它作为参数添加到测试函数中。
以下是示例代码,任何人都可以告诉我我做错了什么吗?
describe('reset data', function() {
it('should reset data', function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 240000;
browser.ignoreSynchronization = true;
// ... test code here
});
});
在大约60秒后测试失败后,我收到以下错误:
错误:超时 - 超时内未调用异步回调 由jasmine.DEFAULT_TIMEOUT_INTERVAL指定。
答案 0 :(得分:0)
尝试改为:
使用递归函数来识别它是否存在。
function checkIfPresent(maxSec, elm, blnPresent) {
if (maxSec > 0) {
browser.sleep(1000).then(function() {
elm.isPresent().then(function(bln) {
if (bln != blnPresent) {
checkIfPresent(maxSec - 1, elm, blnPresent)
}
});
});
}
}
如果您通过checkIfPresent(300000,elm,true)
它将在5分钟内每秒检查一次物体是否存在
希望能帮助到你。 :)
上一条评论:
我同意这个评论
它应该在配置文件(conf.js)上声明
jasmineNodeOpts: {
onComplete: null,
isVerbose: true,
showColors: true,
includeStackTrace: true,
defaultTimeoutInterval: 1000000
}
答案 1 :(得分:0)
我创建了两个函数来覆盖,然后恢复默认的量角器超时:(仅在Chrome中测试)
import { browser } from 'protractor';
export function DefaultTimeoutOverride(milliseconds: number) {
browser.driver.manage().timeouts().setScriptTimeout(milliseconds);
}
export function DefaultTimeoutRestore() {
browser.driver.manage().timeouts().setScriptTimeout(browser.allScriptsTimeout);
}
编辑
我现在已经创建了一个帮助器函数('itTO'),该函数包装了Jasmine的'it'语句并自动应用超时:)
import { browser } from 'protractor';
export function itTO(expectation: string, assertion: (done: DoneFn) => void, timeout: number): void {
it(expectation, AssertionWithTimeout(assertion, timeout), timeout);
}
function AssertionWithTimeout<T extends Function>(fn: T, timeout: number): T {
return <any>function(...args) {
DefaultTimeoutOverride(timeout);
const response = fn(...args);
DefaultTimeoutRestore();
return response;
};
}
function DefaultTimeoutOverride(milliseconds: number) {
browser.driver.manage().timeouts().setScriptTimeout(milliseconds);
}
function DefaultTimeoutRestore() {
browser.driver.manage().timeouts().setScriptTimeout(browser.allScriptsTimeout);
}
使用如下:
itTO('should run longer than protractors default', async () => {
await delay(14000);
}, 15000);
const delay = ms => new Promise(res => setTimeout(res, ms))