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

Protractor 更改函数内部的量角器默认超时,protractor,Protractor,在我的一些量角器测试中,我有一个要调用的函数,它执行的一些任务比量角器默认超时时间(似乎是60秒)还要长 我已经读到,您应该能够使用“jasmine.default\u timeout\u INTERVAL”更改默认超时,但是使用下面的代码,超时仍然发生在我设置的4分钟之前。因为我想在将来重用这个测试部分,所以我不能简单地将它作为参数添加到测试函数中 这是示例代码,有人能告诉我我做错了什么吗 describe('reset data', function() { it('should res

在我的一些量角器测试中,我有一个要调用的函数,它执行的一些任务比量角器默认超时时间(似乎是60秒)还要长

我已经读到,您应该能够使用“jasmine.default\u timeout\u 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\u TIMEOUT\u INTERVAL指定

试试他的:

通过使用递归函数来确定它是否存在

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)中声明


我创建了两个函数来覆盖,然后恢复默认的量角器超时:(仅在Chrome中测试)

编辑

我现在创建了一个helper函数('itTO'),它包装了Jasmine的'it'语句并自动应用超时:)


你看了超时文件了吗?你的规范中关于超时的语法不正确(我会在配置中设置它,而不是在规范中)。我通过谷歌找到的一些帖子直接在规范中使用它们。正如我在回答中添加的,我不希望整个测试有一个超时,例如4分钟,只是一些需要很长时间才能完成的命令。我不希望100个命令只有2个需要4分钟的超时时间。当然,但现在你的测试超时时间似乎是60秒。因此
jasmine.DEFAULT\u TIMEOUT\u INTERVAL=240000似乎什么都没做。是的,这就是问题的目的。我希望它在240000,同时有能力改变它回到60000在同一测试,但它不工作,我想知道是否有办法。我张贴的链接有关于这方面的信息。“若要更改所有规范,请将
jasmineNodeOpts:{defaultTimeoutInterval:timeout_in_millis}
添加到量角器配置文件。若要更改单个规范,请向其传递第三个参数:
it(description,testFn,timeout_in_millis)
”,这对我没有帮助。”。该测试应该有两个单独的超时。第一个是我知道需要很长时间,最多几分钟。例如:前3个呼叫应该有4分钟的超时,其余呼叫应该只需要30秒。是否有某个元素您正在等待出现或消失?检查所述元素不是问题,问题是我进行了测试,其中第一个元素需要3-4分钟才能出现,之后应该是即时的(30秒以下),我不想因为一次调用而将整个规范设置为4-5分钟。
jasmineNodeOpts: {
    onComplete: null,
    isVerbose: true,
    showColors: true,
    includeStackTrace: true,
    defaultTimeoutInterval: 1000000
}
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);
}
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))