更改函数内的量角器默认超时

时间:2017-04-27 11:11:49

标签: protractor

我在我的一些量角器测试中调用了一个函数,它执行的某些任务超过了量角器的默认超时(似乎是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指定。

2 个答案:

答案 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))