2014-12-11 8 views
9

Recentemente ho eseguito il nostro sito Web tramite la nostra suite di test PhantomJS e ho riscontrato errori JavaScript che non riesco a riprodurre manualmente nel browser. Questi errori si trovano nel api mappe di Google e il testo restituito da Capybara è la seguente:PhantomJS Errori JavaScript da gstatic, ma non nel 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 

Si tratta di un bug noto con Capybara, PhantomJS, o l'API di Google Maps? Il problema potrebbe essere causato dalla stringa dell'agente utente in PhantomJS?

risposta

0

provare a impostare il programma utente di

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

Google offre JavaScript che non è del tutto eseguibile con il suo agente utente predefinito. PhantomJS 1.x si basa su un fork molto vecchio di QtWebKit che è paragonabile a Chrome 13 (la ragione per quella stringa di user agent).

E looks like si può fare questo in questo modo:

@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

Viene visualizzato lo stesso errore dell'OP utilizzando capybara-webkit. Ho impostato l'agente utente su suggerito e sto ancora ottenendo l'errore 'TypeError: Unable to delete property'. L'errore si verifica solo per me quando tento di utilizzare il modulo geocoder. Questo errore è iniziato all'improvviso questa mattina. – Scott

+0

Ok, questo suggerisce che il problema non è in PhantomJS o capybara-webkit, ma capybara stesso. C'è lo stesso problema con un driver diverso? Ho appena provato di nuovo con PhantomJS semplice e non ci sono errori con o senza la precedente stringa di user agent. –

+0

cosa hai provato con precisione? Il mio codice è: https://gist.github.com/sgringwe/f7d9859417d8638abf25 – Scott

3

Google maps API versione sperimentale è stato aggiornato questa mattina (12/11) che causa questa rottura. Per impostazione predefinita, quando si includono:

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

si utilizza il latest experimental version. Blocco te stesso per l'ultima versione di rilascio:

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

dovrebbe risolvere questo problema.

+3

Mentre questo ha aiutato temporaneamente, l'aggiornamento è ora (apparentemente) stato spinto alla versione di rilascio e queste modifiche non sono più di aiuto. – user3934630

+0

Dato che non funziona più, sto rimuovendo la risposta. Ho presentato un bug con le persone di Google Maps API e vedremo dove andrà. – user3934630

+0

Non è necessario rimuovere la risposta, ma si prega di modificarla e aggiungere una nota in cima che non funziona più. È troppo facile perdere i commenti. –

4

sto usando cetriolo/Poltergeist e ho violato intorno a questo nel creando la seguente estensione:

/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

Ho provato questa soluzione per RSpec e ha funzionato bene. Grazie. –

+0

Solo una nota per dire se hai qualche altro errore "TypeError: Unable to delete property", questi saranno ignorati silenziosamente, ma non ero in grado di renderlo più specifico per l'errore di google maps e questo era il l'unico modo per farlo funzionare. – robd

Problemi correlati