gpt4 book ai didi

angularjs - 在远程 selenium 服务器上运行 Protractor 测试时 Jasmine 规范超时

转载 作者:行者123 更新时间:2023-12-04 12:46:10 25 4
gpt4 key购买 nike

我有在本地运行良好的 Protractor 测试(directConnect:true),但是当我尝试在远程 Selenium 服务器(网格)上运行它们时,我总是收到以下消息。

A Jasmine spec timed out. Resetting the WebDriver Control Flow.

查看失败,消息和堆栈为我的所有测试用例显示以下内容:
Message:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
Stack:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at Timer.listOnTimeout (timers.js:92:15)

我尝试了很多方法,例如增加 jasmine 超时间隔,在 conf 中添加较早的超时,例如 getPageTimeout 和 allScriptsTimeout,但它仍然抛出 jasmine 超时错误。日志显示以下错误:
00:03:18.328 INFO - Done: [execute async script: try { return (function (rootSelector, ng12Hybrid, callback) {
var el = document.querySelector(rootSelector);

try {
if (!ng12Hybrid && window.getAngularTestability) {
window.getAngularTestability(el).whenStable(callback);
return;
}
if (!window.angular) {
throw new Error('window.angular is undefined. This could be either ' +
'because this is a non-angular page or because your test involves ' +
'client-side navigation, which can interfere with Protractor\'s ' +
'bootstrapping. See http://git.io/v4gXM for details');
}
if (angular.getTestability) {
angular.getTestability(el).whenStable(callback);
} else {
if (!angular.element(el).injector()) {
throw new Error('root element (' + rootSelector + ') has no injector.' +
' this may mean it is not inside ng-app.');
}
angular.element(el).injector().get('$browser').
notifyWhenNoOutstandingRequests(callback);
}
} catch (err) {
callback(err.message);
}
}).apply(this, arguments); }
catch(e) { throw (e instanceof Error) ? e : new Error(e); }, [body, false]])

我确信我的应用程序是有 Angular 的,并且在本地运行时它可以成功运行。我试过设置
browser.ignoreSynchronization = true

,以及设置
rootElement='html#ng-app' 

在 conf (bc 我的 ng-app 不在正文中,而是在 html 标签内)。框架设置为“ Jasmine ”,虽然我尝试过“ Jasmine 2”,但似乎都没有任何区别。在远程服务器上,我能够启动 Firefox,并且 UI 向我显示已启动的 Firefox session 。然而,它只是坐在那里,直到超时发生。任何输入将不胜感激!

最佳答案

Jasmine 需要知道它正在运行一个异步进程以及该进程应该何时完成(以继续您可能正在运行的任何其他测试)。

这是通过将 done 传递给 Jasmine 异步方法回调并在解决异步操作时调用 done() 来获得的。

如果不调用 done() Jasmine 会显示超时错误。我认为这应该可以解决您的问题。

更多信息在这里:
Mocking ngResource in Angular unit tests

希望这可以帮助!

关于angularjs - 在远程 selenium 服务器上运行 Protractor 测试时 Jasmine 规范超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39714235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com