【问题标题】:Jasmine Error while waiting for Protractor to sync with the page: "hooks is undefined"等待量角器与页面同步时出现 Jasmine 错误:“钩子未定义”
【发布时间】:2018-01-04 08:13:40
【问题描述】:

我在给定 Jasmine 规范中的所有个人量角器测试都已通过,但该规范仍然失败并显示以下消息:

Failed: Error while waiting for Protractor to sync with the page: "hooks is undefined"

我还没有找到任何关于“钩子未定义”含义的信息。

使用 量角器@5.1.2 火狐57.0.3

没有堆栈跟踪;报错全文如下:

An error was thrown in an afterAll
AfterAll Failed: Error while waiting for Protractor to sync with the page: "hooks is undefined"

【问题讨论】:

    标签: selenium jasmine protractor hook


    【解决方案1】:

    当量角器在 beforeAll、beforeEach、afterAll 或 afterEach 钩子期间尝试与页面交互时,可能会引发错误,而 Angular 尚未加载到该页面上。其原因与“无法读取未定义的属性 '$$testability'”基本相同。

    一种可能的解决方案是将其放在钩子中任何量角器活动上方的行中:

    browser.sleep(2000);
    

    和/或增加之前/之后挂钩中现有睡眠的长度,以便页面有时间在调用量角器之前先加载角度。

    【讨论】:

    • 我坚信browser.sleep() 永远不是解决任何问题的好方法 :) 您能否编辑您的问题并添加一些有关您使用的量角器版本、量角器配置和完整的信息错误的追溯?我想进一步调查一下。谢谢!
    • 当然,可能有一种方法可以动态等待 Angular 在页面上准备就绪,但是 ExpectedConditions 和 waitForAngular 在 Angular 加载之前不起作用,我还没有找到任何其他等待方式用于加载除 browser.sleep() 以外的 Angular。
    • 我个人认为,与始终避免它们所涉及的额外工程工作相比,硬编码睡眠造成的测试执行性能时间损失可以忽略不计。如果只是做大量工作来找到一种可靠的方法来避免它们,那将是一回事——但根据我的经验,为避免睡眠而构建的 Selenium 套件也往往会因此引发错误的故障——尤其是在角!如果本可以通过睡眠避免的错误失败延迟了团队合并优质代码的能力,即使是一两次……我们节省的半秒值得吗?
    • 你说得有道理,但我们不要走这条路,我们将在这个线程的“支持”主题上来回淹没 cmets :) 我仍然很好奇什么在这种情况下确实发生了 - 永远不需要延迟 Angular 启动。如果可能,请提供上述详细信息。谢谢!
    • 提供了详细信息。有趣的是,您不需要等待 angular 启动 - 我需要定期至少睡眠 500 毫秒,然后它才会接受 browser.waitForAngular() 或在直接加载新页面后的任何其他量角器交互网址。浏览 Angular 应用程序中的链接似乎不需要睡眠。
    猜你喜欢
    • 2016-04-26
    • 2018-12-07
    • 2014-05-16
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2019-06-12
    • 2015-05-06
    相关资源
    最近更新 更多