Google maps gstatic中的PhantomJS JavaScript错误,但不在浏览器中
我最近通过PhantomJS测试套件运行了我们的网站,遇到了JavaScript错误,我无法在浏览器中手动重现这些错误。Google maps api中发现了这些错误,Capybara返回的文本如下:Google maps gstatic中的PhantomJS JavaScript错误,但不在浏览器中,google-maps,capybara,phantomjs,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
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
这是已知的水豚、幻影JS或谷歌地图API的bug吗?问题是否由PhantomJS中的用户代理字符串引起?尝试将用户代理设置为 Mozilla/5.0(Windows NT 6.0)AppleWebKit/535.1(KHTML,如Gecko)Chrome/13.0.782.41 Safari/535.1 谷歌交付的JavaScript不能完全通过其默认用户代理运行。PhantomJS 1.x基于QtWebKit的一个非常古老的分支,与Chrome 13相当(用户代理字符串的原因) 您可以这样做:
@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' }
谷歌地图API实验版于今早(11月12日)更新,导致了此次破坏。默认情况下,包括:
它使用。将自己锁定到最新版本:
应该可以解决这个问题。我正在使用Cucumber/Poltergeist,我在中通过创建以下扩展来解决这个问题: /功能/支持/env.rb
Capybara::Poltergeist::Driver.new(应用程序、,
:extensions=>[“features/support/ignore\u gmaps\u errors.js”]
)
/features/support/ignore_gmaps_errors.js
window.onerror=函数(消息){
如果(消息==“TypeError:无法删除属性”。){
log(“忽略gmaps错误”);
返回false;
}否则{
返回true;
}
};
使用谷歌地图(v3.19)的最新实验版本,包括一个解决方案,为我修复了这个问题:
[编辑]谷歌地图第3.19版已经发布。此外,PhantomJS版本2于2015年1月23日发布,其中包含了一个没有出现
无法删除属性问题的问题。我收到了与使用capybara webkit的OP相同的错误。我将用户代理设置为建议的,但仍然得到类型错误:无法删除属性错误。只有当我尝试使用地理编码器模块时,错误才会发生。这个错误在今天早上突然出现。好吧,这表明问题不在PhantomJS或capybara webkit中,而是在capybara本身。不同的司机有相同的问题吗?我只是用普通的PhantomJS再次尝试了一下,无论是否使用上面的用户代理字符串,都没有错误。您到底尝试了什么?我的代码是:是的,但是当我第一次编写脚本时,GM实际上使用了MapsAPI,现在不再使用了。至少不是公共版本。虽然这暂时有帮助,但更新现在(显然)已被推到发布版本,这些更改不再有帮助。因为这不再有效,我正在删除答案。我已经向google maps api人员提交了一个bug,我们将看到它的发展方向。不需要删除答案,但请编辑它,并在顶部添加一个注释,说明它不再有效。很容易漏掉评论。你能分享bug报告URL来跟踪吗?你可以在这里跟踪问题:我为RSpec尝试了这个解决方案,效果很好。谢谢。请注意,如果您有任何其他“TypeError:Canable to delete property”
错误,这些错误将被默默忽略,但我无法使它更具体地针对google maps错误,这是我唯一能让它工作的方法。