错误超时等待量角器在 11 秒后与页面同步

Posted

技术标签:

【中文标题】错误超时等待量角器在 11 秒后与页面同步【英文标题】:Error Timed out waiting for Protractor to synchronize with the page after 11 seconds 【发布时间】:2015-05-06 13:49:36 【问题描述】:

我的量角器测试有问题。我的 Angular 应用程序使用 $timeout 不断从服务器轮询某些内容。不幸的是,当我运行测试时,这会导致以下错误消息:

 There was a webdriver error: Error Timed out waiting for Protractor to synchronize with the page after 11 seconds. Please see https://github.com/angular/protrac
tor/blob/master/docs/faq.md

如何处理这种连续轮询超时?在我的情况下,将browser.ignoreSynchronization 设置为false 不是一个好的解决方案(当我这样做时,我必须插入很多browser.sleep()

按照here 的建议从 $timeout 切换到 $interval 目前在我的应用程序中是不可能的。增加超时也是不可能的(正如我所说的服务不断从服务器轮询某些东西)

是否有可能更改waitForAngular 例程以使我的测试不会超时?

我们将不胜感激任何帮助。

【问题讨论】:

【参考方案1】:

来自protractor's documentation:

在执行任何操作之前,Protractor 会要求 Angular 等到 页面已同步。这意味着所有超时和 http 请求完成。如果您的应用程序不断轮询 $timeout 或 $http,它永远不会被注册为完全加载。你应该 使用 $interval 服务 (interval.js) 进行任何轮询 连续(在 Angular 1.2rc3 中引入)。

【讨论】:

没有其他方法可以解决这个问题吗?【参考方案2】:

与你同船。

我们看到很多帖子讨论sleep()waitForAngular()browser.ignoreSynchronization

我同意你的观点,设置:ignoreSynchronization = true 不是一个好主意,因为它迫使我们手动等待每个异步进程。

有人建议像这样一起使用sleep()waitForAngular()

browser.sleep(10000);
browser.waitForAngular();

我真的不明白为什么有时waitForAngular() 无法等待页面同步完成,而这个“双重等待”代码确实有效。

请查看它是否适用于您的情况。

【讨论】:

【参考方案3】:

将 allScriptsTimeout 更改为大于 11000 千的值解决了我的问题

等待量角器超时...

在 node_modules/protractor/lib/configParser.js 中,更改:

allScriptsTimeout: 25000

【讨论】:

您不应该更改模块内部的默认值...在您自己的配置文件中更改它。请参阅下面的评论 (***.com/a/36353189/672870)。【参考方案4】:

在量角器配置文件中添加 allScriptsTimeout: 50000

exports.config = 
    ...
    allScriptsTimeout: 50000,
    ...
;

或者至少这解决了我的问题

【讨论】:

以上是关于错误超时等待量角器在 11 秒后与页面同步的主要内容,如果未能解决你的问题,请参考以下文章

等待 Protractor 与页面同步时出错:在 Protractor IE11 执行中

使用带有 Angular2 和 Socket.io 的量角器运行 e2e 测试

执行量角器测试时“失败:等待量角器与页面同步时出错”

Jasmine在等待Protractor与页面同步时出错:“hooks is undefined”

使用 appium 执行量角器脚本时等待异步脚本结果超时

量角器同步与异步