2014-12-11 13 views
9

Ich habe kürzlich unsere Website über unsere PhantomJS-Testsuite laufen lassen und dabei JavaScript-Fehler bekommen, die ich nicht manuell in meinem Browser reproduzieren kann. Diese Fehler werden in der Google Maps API und der Text zurück von Capybara gefunden ist wie folgt:PhantomJS JavaScript-Fehler von gstatic, aber nicht im Browser

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 

Ist dies ein bekannter Fehler mit Capybara, PhantomJS oder die Google Maps API? Könnte das Problem durch die User-Agent-Zeichenfolge in PhantomJS verursacht werden?

Antwort

0

Versuchen Sie, die User-Agent

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

Google liefert JavaScript-Einstellung, die mit dem Standardbenutzerprogramm nicht vollständig runnable ist. PhantomJS 1.x basiert auf einer wirklich alten Abzweigung von QtWebKit, die vergleichbar ist mit Chrome 13 (der Grund für diese User-Agent-Zeichenfolge).

Es looks like Sie können dies auf diese Weise tun:

@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' } 
+0

Ich bekomme den gleichen Fehler wie die OP mit Capybara-Webkit. Ich setze den User-Agent auf den vorgeschlagenen und bekomme immer noch den Fehler 'TypeError: Kann die Eigenschaft nicht löschen'. Der Fehler tritt nur bei mir auf, wenn ich versuche, das Geocoder-Modul zu verwenden. Dieser Fehler hat heute Morgen plötzlich begonnen. – Scott

+0

Ok, dies deutet darauf hin, dass das Problem nicht in PhantomJS oder Capybara-Webkit, sondern Capybara selbst ist. Gibt es das gleiche Problem mit einem anderen Treiber? Ich habe es gerade noch einmal mit PhantomJS versucht und es gibt keine Fehler mit oder ohne die obige User-Agent-Zeichenfolge. –

+0

was hast du genau versucht? Mein Code ist: https://gist.github.com/sgringwe/f7d9859417d8638abf25 – Scott

3

Google Maps API experimentelle Version heute Morgen wurde aktualisiert (12/11) verursacht diesen Bruch. Standardmäßig, wenn Sie umfassen:

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

es die latest experimental version verwendet. Sperren Sie sich auf die neueste Release-Version:

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

dieses Problem beheben sollte.

+3

Während dies vorübergehend half, wurde das Update (scheinbar) auf die Release-Version übertragen und diese Änderungen helfen nicht mehr. – user3934630

+0

Da dies nicht mehr funktioniert, entferne ich die Antwort. Ich habe einen Fehler mit den Google Maps API-Leuten eingereicht und wir werden sehen, wohin das geht. – user3934630

+0

Keine Notwendigkeit, die Antwort zu entfernen, aber bitte bearbeiten Sie es und fügen Sie eine Notiz oben, dass es nicht mehr funktioniert. Es ist zu leicht, die Kommentare zu verpassen. –

4

Ich bin mit Gurke/Poltergeist und ich gehackt, um dieses in durch die folgende Erweiterung zu schaffen:

/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; 
    } 
}; 
+0

Ich habe diese Lösung für RSpec versucht und es hat gut funktioniert. Vielen Dank. –

+0

Nur ein Hinweis zu sagen, wenn Sie andere "TypeError: Kann nicht löschen" Eigenschaft Fehler, diese werden stillschweigend ignoriert, aber ich war nicht in der Lage, es spezifischer für die Google Maps Fehler und das war die Nur so konnte ich es funktionieren lassen. – robd

Verwandte Themen