Angular 1.2.x更新到1.3.x,导致PhantomJsDriver(GhostDriver)呈现网页失败

时间:2015-03-23 09:05:27

标签: angularjs selenium selenium-webdriver phantomjs ghostdriver

在我们将客户端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版本来解决它而没有成功。

1 个答案:

答案 0 :(得分: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