【问题标题】:Protractor: Polyfill Function.prototype.bind in PhantomJS. Can't make it work, is it even possible?量角器:PhantomJS 中的 Polyfill Function.prototype.bind。不能让它工作,甚至可能吗?
【发布时间】:2016-01-09 03:31:11
【问题描述】:

我已经花了一个下午的时间,但没有取得任何进展,我真的开始怀疑这是否可能。

我正在使用带有 Headroom 的 Angular 来处理向下滚动时消失的菜单。我的测试是使用 Protractor 完成的,使用 PhantomJS,这就是乐趣的开始。

PhantomJS 不支持.bind(),Headroom 到处使用它,这意味着我需要对其进行填充。应该没问题,但是我做不到。

我想我的问题是,无论我在哪里运行 polyfill 函数,PhantomJS 和测试页面都已经加载,所以已经来不及了,由于 .bind() 不可用,Headroom 将无法加载。

有没有办法在页面加载之前运行这些方法?我知道我可以通过头部的脚本标签将它们添加到我的应用程序中,但我宁愿不向整个应用程序添加仅由测试框架使用的东西。

【问题讨论】:

  • 为什么首先要使用 PhantomJS? (stackoverflow.com/a/30088962/771848)
  • 我知道支持并不理想,但我们正在使用它。我老板的论点主要是 CI 上的无头 Chrome 维护起来很痛苦(我不知道它到底有多少,我从来没有做过),而且对于我们现在的预算来说,Sauce Labs 的成本太高了.所以 PhantomJS 就是这样。
  • 你有机会提供一些代码或jsFiddle吗?我很想看看这里到底发生了什么。

标签: angularjs phantomjs protractor angularjs-e2e polyfills


【解决方案1】:

我想我有一个解决方法。 (至少试一试,我们会看看它是否工作)你能做的最好的就是修补你的 phantomJS 浏览器以支持这种方法。基本上你应该在每个规范之前运行一个脚本,这样它就可以应用于全局范围并且可以用于你的规范。

只需尝试扩展您的规格配置即可。这是一个例子:

...
specs: ['my_phantomjs_bind_patch.js', 'webtests/**/*.js']
...

【讨论】:

  • 已经很长时间了(我什至不再使用 Angular 或 Protractor),但我想我确实尝试过但没有成功。如果有人尝试过并且有效,我会接受你的回答。
【解决方案2】:

您不能在实际页面加载之前运行脚本,因为它们是 dom 树的一部分。您可以做的是:`

window.onload = function() {
//do something
}; 

但即使触发了 onload 事件,也必须呈现标签。所以你应该尝试你的想法,并在所有其他元素之前添加一个脚本标签到你的 html 并在那里运行代码,如果它只是为了测试运行。 `

`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多