如何在Protractor中覆盖defaultTimeoutInterval
和it
方法的默认超时(describe
)?它默认为2500ms
。
答案 0 :(得分:16)
我自己就找到了答案。
在config.js
:
jasmineNodeOpts: {
defaultTimeoutInterval: 25000
},
答案 1 :(得分:0)
您可以使用以下两个功能覆盖特定的“ it”测试中的默认超时,以覆盖然后恢复默认值:(仅在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))