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