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