【问题标题】:Angular 1.2.x update to 1.3.x, cause failure in PhantomJsDriver (GhostDriver) rendering of a webpageAngular 1.2.x 更新到 1.3.x,导致网页的 PhantomJsDriver (GhostDriver) 渲染失败
【发布时间】:2015-03-23 09:05:27
【问题描述】:

在我们将客户端 Angular 版本从 1.2.8 更新到 1.3.5(或为此尝试其他 1.3.x 版本)后,其中一个 SUT 网页开始渲染失败(网页根本没有渲染),出现错误:

[错误 - 2015-03-22T08:28:04.332Z] 会话 [5b8fa230-d06d-11e4-b704-1530b0109512] - page.onError - msg:错误: 请求的键值不是对象。在键([本机 代码]) 在扩展 (http://localhost:9920/services/our-product/bower_components/angular/angular.js:411:29) 在 setSettings (http://localhost:9920/services/our-product/scripts/scripts.min.js:2:51263) 在一个 (http://localhost:9920/services/our-product/scripts/scripts.min.js:2:25657)

在人类语言中:方法 Object.keys() 失败,它是从 angular.extend() 方法调用的。

我们使用 PhantomJsDriver 1.2.0 version,我们从 PhantomJs 1.9.7 开始并尝试通过更新到 2.0 版本来解决它,但没有成功。

【问题讨论】:

  • 这可能是与PhantomJS不兼容,因为1.x版本的引擎已经4年多了。尝试更新到 PhantomJS 2(你需要在 linux 上自己编译)。
  • @ArtjomB。尝试过,没有成功。

标签: angularjs selenium selenium-webdriver phantomjs ghostdriver


【解决方案1】:

找到原因了。

Object.keys()返回对象属性数组,它必须接收对象作为参数,如:Object.keys(obj)。 Object.keys() 未在 Angular.extend 的早期版本中使用,而是在 1.3.x 版本之一中引入。

导致问题的原因是什么? 我们的服务器端在某一时刻将空对象作为字符串发送,而不是正确的空对象定义:

"personData": "{}",

代替:

"personData": {},

因此,Object.keys() 无法解析它,它没有收到正确的对象。因此渲染失败。并且因为 Object.keys() 只在 Angular 1.3.x 中引入,以前它没有引起任何问题。

有趣的是,例如,Chrome 成功地“理解”了它是一个空对象,但 PhantomJsDriver 却不是。并且引出了另一个有趣的点——这个问题在 Safari 中也有重现,原因是相同的 JS 渲染引擎 PhantomJs 和 Safari 共享——WebKit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多