Protractor: 错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调

创建于 2016-02-19  ·  26评论  ·  资料来源: angular/protractor

我使用“ http://www.protractortest.org/#/tutorial ”中的示例

// spec.js
describe('Protractor Demo App', function() {
  it('should have a title', function() {
    browser.get('http://juliemr.github.io/protractor-demo/');

    expect(browser.getTitle()).toEqual('Super Calculator');
  });
});

// conf.js
exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['spec.js']
}

现在运行测试

protractor conf.js

然后控制台显示:
image

needs more info

最有用的评论

@sallojusuresh ,以下解决方案有效。
茉莉花节点选择:{
默认超时间隔:2500000
},
问题 - 当我们可以像上面那样设置默认时间时,在 'beforeEach' 中使用 setTimeout 函数并在 'it' 中完成回调。 任何的想法?

所有26条评论

您可以在下面的帖子中找到解决方案:只需浏览整个帖子。

https://github.com/angular/protractor/issues/2941#issuecomment -186104304

你能成功启动硒吗? 如果你使用directConnect会发生什么?

关闭陈旧的问题。

我有同样的问题,另一篇文章对我不起作用。
@juliemr 对此有什么解决方案吗? 我试过 allScriptsTimeout: 900000 但这并不能解决问题。

对我也不起作用。 增加 defaultTimeoutInterval 并不能解决它

@juliemr我遇到了同样的问题,增加 ScriptsTimeout 对我不起作用。 你有什么解决办法吗? 谢谢你。

大家好,

我在量角器中运行一个测试用例,出现超时错误。 这是详细信息。 请指教。 谢谢

错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。

sample_spec.js

describe('Mcac App 测试', function() {
browser.get('http://localhost:3000/integrated/myWeb.html');
beforeEach(函数(完成){
window.jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
设置超时(函数(){
console.log('内部超时');
完毕();
}, 50000);
});
//browser.get('http://localhost:3000/integrated/myWeb.html');
// browser.get('http://localhost:3000/integrated/myWeb.html').then(function() {
it('电子邮件地址验证', function()
{

        element(by.model('ctrl.formData.emailAddress')).sendKeys('').clear();
        element(by.model('ctrl.formData.emailAddress')).sendKeys('[email protected]');
        element(by.model('ctrl.formData.emailAddress')).getAttribute('value').then(function (value) {
            expect(value).toEqual('[email protected]');
        });


}, 10000);

// element(by.xpath("//button[text()='Confirm']")).click();
browser.sleep(5000);

});

配置.js

// 一个示例配置文件。
出口.config = {
直接连接:真,

// 要传递给 webdriver 实例的功能。
能力:{
“浏览器名称”:“铬”
},

// 要使用的框架。 推荐茉莉花。
框架:'茉莉花',

// 规范模式是相对于当前工作目录的
// 量角器被调用。
// 规格:['example_spec.js'],
//规格:['mcac_spec.js'],
//规格:['mcac_spec_mobile.js'],
规格:['mcac_online.js'],
// 传递给 Jasmine 的选项。
茉莉花节点选择:{
默认超时间隔:5000
}

};

非常感谢任何帮助。

我遇到了这个问题,这是因为重复$timeout$timeout会阻止 Protractor,而$interval不会)。

要查找重复的 $timeout,您可以使用 Protractor 的元素浏览器,例如:

$ protractor config/protractor.js --elementExplorer
Starting debugger agent.
Debugger listening on port 5858
> var body = element(by.css('body'))
> body.isPresent()
ScriptTimeoutError: Timed out waiting for asynchronous Angular tasks to finish after 15 seconds. This may be because the current page is not an Angular application. Please see the FAQ for more details: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular
While waiting for element with locator - Locator: By(css selector, body). 
The following tasks were pending:
 - $timeout: function () {
        // ......
    }

谢谢你。

我发现了这个问题。 这是因为 url 加载需要时间和寻找
html 页面中的 ng-app 标记。

最好的祝福,
纳伦德拉

纳伦德拉……!

2016 年 12 月 15 日 06:12,Amy Boyd [email protected]写道:

我遇到了这个问题,这是因为重复 $timeout ($timeout
阻止量角器,而 $interval 没有)。

要查找重复的 $timeout,您可以使用 Protractor 的元素资源管理器,
例如:

$量角器配置/量角器.js --elementExplorer
启动调试器代理。
侦听端口 5858 的调试器

var body = element(by.css('body'))
body.isPresent()
ScriptTimeoutError:等待异步 Angular 任务在 15 秒后完成时超时。 这可能是因为当前页面不是 Angular 应用程序。 有关更多详细信息,请参阅常见问题解答: https ://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting -for-angular
在等待带有定位器的元素时 - 定位器:按(css 选择器,正文)。
以下任务待处理:

  • $超时:函数(){
    // ......
    }


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/angular/protractor/issues/2963#issuecomment-267302567
或使线程静音
https://github.com/notifications/unsubscribe-auth/AViSFkiN29oWnH6AJ0P_wNY_LNzE2fglks5rISCYgaJpZM4Hd20v
.

大家好,

我在量角器中运行一个测试用例,出现超时错误。 这是详细信息。 请指教。 谢谢

失败:等待异步 Angular 任务在 30 秒后完成时超时。 这可能是因为当前页面不是 Angular 应用程序。

@sallojusuresh ,以下解决方案有效。
茉莉花节点选择:{
默认超时间隔:2500000
},
问题 - 当我们可以像上面那样设置默认时间时,在 'beforeEach' 中使用 setTimeout 函数并在 'it' 中完成回调。 任何的想法?

我已经通过以下方式修复

 var originalTimeout;

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

    afterEach(function() {
      jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });

谢谢你。

纳伦德拉……!

2018 年 3 月 11 日 23:53,Md. Zahirul Haque [email protected]
写道:

我已经通过以下方式修复

` var originalTimeout;

之前(函数(){
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
茉莉花.DEFAULT_TIMEOUT_INTERVAL = 10000;
});

之后(函数(){
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});`


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/angular/protractor/issues/2963#issuecomment-372187210
或使线程静音
https://github.com/notifications/unsubscribe-auth/AViSFg7ITAW3XW5zky_-QXXmAudt11qDks5tdfE1gaJpZM4Hd20v
.

@NickTomlin你刚刚度过了我的一天 :) 我使用了直接连接并工作了。 如果您对 directconnect actaully 所做的事情有所了解,那就太好了

在我的例子中,这个错误是由“fixture.detectChanges()”的不当使用引起的。这个方法似乎是一个事件监听器(异步),它只会在检测到变化时响应回调。 如果未检测到更改,则不会调用回调,从而导致超时错误。 希望这可以帮助 :)

@juliemr超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。 这个错误再次出现在我的测试中,我在每次之前,每次之后使用 browser.sleep,将 jasmine timeout iterval 增加到 100000。但是我的代码没有运行,所以请建议我该怎么做。

我遇到了这个问题并且无法解决,同时将茉莉花超时增加到 300000。所以请建议我该怎么做。

你能提供简单的例子吗?

解决方案是,如果您尝试为非 Angular 应用程序编写测试,请转到 node_modules/protractor/built 的 runner.js
将第 210 行编辑为 waitForAngularEnabled: false //true

@juliemr建议使此设置可配置。

您可以在onPrepare()部分执行此操作:

onPrepare: async () => {
    await browser.waitForAngularEnabled(false);
    ....
}

我遇到了同样的问题,但这里提供的解决方案对我不起作用。 如果你有时间,请看看我关于 Stack Overflow 的问题。 这个问题很容易重现,我有一个回购。 我想这可能是一个错误。
https://stackoverflow.com/questions/53786401/error-debugging-protractor-with-node-8-async-await-and-angular-6

预期 false 等于 true 因为:控制台中存在错误日志:Entry {
级别:级别{名称_:'严重',值_:1000},
信息:
“错误”错误:formGroup 需要一个 FormGroup 实例。 请传入一个。\n\n 示例:\n\n \n

\n \n
\n\n 在你的班级:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });\n 在 Function.e.missingFormException

点击弹出按钮时出现问题,有什么解决办法吗?

我对 post 有类似的问题,我已经解决了在导入时添加 HttpClientModule 的问题:

beforeEach(() => {

TestBed.configureTestingModule({

    declarations: [],

    providers: [ CookieService, HttpClient],  

    imports: [HttpClientModule],
});

});

我对 post 有类似的问题,我已经解决了在导入时添加 HttpClientModule 的问题:

beforeEach(() => {

TestBed.configureTestingModule({

    declarations: [],

    providers: [ CookieService, HttpClient],  

    imports: [HttpClientModule],
});

});

我个人在将 HttpClientModule 导入测试台时遇到了问题。 它尝试在您的单元测试中运行您的 API,结果它们失败了。 正确的方法是使用 HttpClientTestingModule

@sallojusuresh ,以下解决方案有效。
茉莉花节点选择:{
默认超时间隔:2500000
},
问题 - 当我们可以像上面那样设置默认时间时,在 'beforeEach' 中使用 setTimeout 函数并在 'it' 中完成回调。 任何的想法?

这是最好的解决方案,只需将这段代码粘贴到您的配置文件中即可解决您的问题。

此页面是否有帮助?
0 / 5 - 0 等级