来自gstatic的PhantomJS JavaScript错误,但不是在浏览器中

时间:2014-12-11 17:44:24

标签: google-maps capybara phantomjs

我最近通过我们的PhantomJS测试套件运行了我们的网站,并遇到了JavaScript错误,我无法在我的浏览器中手动重现。这些错误可在Google maps api中找到,Capybara返回的文字如下:

TypeError: Unable to delete property.
TypeError: Unable to delete property.
   at :215
   at https://maps.gstatic.com/maps-api-v3/api/js/19/3/main.js:20 in cf
   at https://maps.gstatic.com/maps-api-v3/api/js/19/3/main.js:20 in cf
   at https://maps.gstatic.com/maps-api-v3/api/js/19/3/main.js:19
   at :214
   at https://maps.gstatic.com/maps-api-v3/api/js/19/3/main.js:20 in cf
   at https://maps.gstatic.com/maps-api-v3/api/js/19/3/main.js:20 in cf
   at https://maps.gstatic.com/maps-api-v3/api/js/19/3/main.js:21
   at :176
   at :31
   at https://maps.gstatic.com/maps-api-v3/api/js/19/3/main.js:26 in Yf
   at :178

这是Capybara,PhantomJS或Google maps API的已知错误吗?问题可能是由PhantomJS中的用户代理字符串引起的吗?

4 个答案:

答案 0 :(得分:4)

我正在使用Cucumber / Poltergeist,我通过创建以下扩展程序来解决这个问题:

/features/support/env.rb

Capybara::Poltergeist::Driver.new(app, 
  :extensions => ["features/support/ignore_gmaps_errors.js"]
)

/features/support/ignore_gmaps_errors.js

window.onerror = function(message) {
  if (message == 'TypeError: Unable to delete property.') {
    console.log('Ignoring gmaps error');
    return false;
  } else {
    return true;
  }
};

答案 1 :(得分:3)

谷歌地图API实验版今早(12/11)更新,导致此次破损。默认情况下,包括:

<script src="//maps.googleapis.com/maps/api/js?libraries=places"></script>

它使用latest experimental version。将自己锁定到最新版本:

<script src="//maps.googleapis.com/maps/api/js?v=3&libraries=places"></script>

应该解决这个问题。

答案 2 :(得分:1)

使用包含解决方法的最新实验版Google地图(v3.19),为我解决了这个问题:https://code.google.com/p/gmaps-api-issues/issues/detail?id=7475#c20

[编辑] Google地图v3.19版本为released as the production version on 17 Feb 2015。此外,PhantomJS第2版于2015年1月23日发布,其中包含updated WebKit module并未显示Unable to delete property问题。

答案 3 :(得分:0)

尝试将用户代理设置为

  

Mozilla / 5.0(Windows NT 6.0)AppleWebKit / 535.1(KHTML,与Gecko一样)Chrome / 13.0.782.41 Safari / 535.1

Google提供的JavaScript使用默认用户代理无法完全运行。 PhantomJS 1.x基于一个非常古老的QtWebKit分支,可与Chrome 13(用户代理字符串的原因)相媲美。

looks like你可以这样做:

@session = Capybara::Session.new(:poltergeist)
@session.driver.headers = { 'User-Agent' => 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1' }