当前位置: 首页 > 知识库问答 >
问题:

失败:等待异步Angular任务在11秒后完成超时

卫振
2023-03-14

我想使用Protractor对angular 2应用程序进行端到端测试,但我始终坚持以下信息:

"Failed: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds."

我的conf文件。

exports.config = {
  directConnect: true,
  specs: ['spec.js'],

  // For angular2 tests
  useAllAngular2AppRoots: true,
}

Chrome 被打开,网站也被打开,然后什么也没发生,直到超时。

禁用同步时(使用browser . ignore synchron ization = true;),就可以了。但是我正在失去“自动等待”的功能,这是使用量角器的主要优势之一。

应用程序完全基于角度2。那么为什么这不起作用呢?

我们的开发人员告诉我,我们没有轮询(根据量角器文档的可能原因之一)。顺便说一下,我们正在使用websocket架构。我不知道是否有链接。

实际上,我根本不知道如何解决这个问题。

有人能帮忙吗?

共有3个答案

常波鸿
2023-03-14

修改测试用例并放入browser.waitForAngularEnabled(false)在第一次单击后,应该可以工作。

但是,推荐的方法可以覆盖 conf.js 文件中的默认超时,因为 allScriptsTimeout:110000

蒙奇
2023-03-14

暂时启用browser.ignoreSynchronization会修复它,如这里的答案所述。

browser.ignoreSynchronization = true;

(引发错误的代码)

browser.ignoreSynchronization = false;
袁法
2023-03-14

你的猜测是对的。当 angular2 应用程序中有任何未完成的任务运行时,会发生此错误。

是的,最常见的原因是当应用程序持续轮询$timeout或$http时,Protractor将无限期等待并超时。但这也可能发生在应用程序耗时超过11秒的情况下

有关不同超时的更多信息,请参阅此处

默认超时值为11秒。您可以通过调整config.js中的以下值来改变这一点,并尝试查看是否仍然存在问题

  /**
   * The timeout in milliseconds for each script run on the browser. This
   * should be longer than the maximum time your application needs to
   * stabilize between tasks.
   */
  allScriptsTimeout?: number;
 类似资料:
  • 所以我在Angular中开发了一个新组件,在ngOninit中我有以下异步函数。。。 这getUserProfile需要完成才能调用它。getPrivateGroup()和这个。需要先完成getPrivateGroup(),然后才能调用此函数。loadGroupPosts()。我知道我可以在异步请求的回调中编写这些函数,但我想知道是否有一种方法可以将它保存在ngOnInit中以保持其更干净? 有人

  • 我通读了Dart/flatter中的Async/Await/then,试图理解为什么aysnc函数中的Await不会等到完成后再继续。在我的UI中,有一个按钮调用一个异步方法来返回一个位置,该位置总是返回null,并且不等待函数完成。 该函数将调用推送到一个新的UI页面,该页面选择一个位置,并应返回一个结果。如何使该函数等待结果?我不是在使用异步吗?

  • 问题内容: 我使用Node.js和TypeScript,并且使用。这是我的测试用例: 我想为整个功能设置一个超时时间。即如果要花费2秒,花费0.5秒,花费5秒,我想在3秒钟后让我抛出错误的超时。 正常调用是一个问题,因为范围丢失了: 而且我不能用普通的方式抓住它: 有关如何解决的任何想法? 问题答案: 您可以使用超时: 您必须将其包装在诺言中才能使用。

  • 问题内容: 如何让我的代码等待,直到DispatchQueue中的任务完成?是否需要任何CompletionHandler或其他东西? 我正在使用Xcode 8.2并在Swift 3中编写。 问题答案: 使用s可以实现这一点。您可以在群组和通话达到平衡时得到通知: 或者您可以等待: 注意 :阻止当前队列(在您的情况下可能是主队列),因此您必须在另一个队列上(如上面的示例代码中)以避免 死锁 。

  • 给出一些关于我正在尝试做的细节:我正在用Java制作一个Minecraft插件。我有一个对象,它使用HashMap绑定到Minecraft的Player对象。 我在这个对象中有一个方法,类似于: 显然,会有很多事情发生,所以我希望这是异步发生的。计时器将在后台继续,它不会阻止代码中的任何其他内容。 对不起,如果我的问题太简单了,但我真的检查了网络和我是新的Java,所以原谅我的无知。

  • 问题内容: 我不确定如何处理这种情况,因为我是iOS开发和Swift的新手。我正在像这样执行数据获取: 我的loadShows()函数解析从加载到UIWebView的网站中获取的大量数据。问题是我在loadShows函数中有一个等待10秒钟左右的计时器。这允许页面中的javascript在开始解析数据之前完全加载。我的问题是完成处理程序在我的loadShows()之前完成。 我想做的是为“ isC

  • 问题内容: 我知道这个问题以前曾被问过,但是所有解决方案都不适合我。 我有一个将参数发送到API的函数,并以列表的形式返回数据。我有一个UITableView设置为使用该列表,但是它在列表分配给变量之前运行。 码: 如果不立即将其作为重复投票,我将不胜感激,这是我尝试的方法。 派遣组 信号量计时 运行变量 其中包括= self和= self 。 编辑:要求提取项目, 问题答案: 您不能-也不应该-

  • 问题内容: 嗨,我的脚本中有2个Ajax调用,我需要它们运行asnyc以节省时间,但是我需要第二个才能等待第一个完成。 有什么想法吗?谢谢 问题答案: 如果使用jQuery 1.5+,则可以使用jQuery 完成。诸如此类的东西(缩短了ajax的简洁性,只需像上面那样传递对象) 您不知道它们将以什么顺序返回,因此,如果您手动滚动此请求,则需要检查另一个请求的状态并等待它返回。