2012-04-26 14 views
8

Quando ho impostato uno dei miei test rspec su: js => true, ricevo il seguente errore. Sto utilizzando le seguenti versioni:Capybara + Selenium + RSpec - LoadError quando si imposta JS su true

Rails - 3.2.2
RSpec - 2.9.0
Capybara - 1.1.2

Secondo la documentazione, Capybara dovrebbe eseguire qualsiasi spec utilizzando: js => vero attraverso il selenio. Ho provato ad aggiungere Selenium al mio Gemfile, nel caso in cui Capybara non fosse in grado di trovarlo ma non ha funzionato.

1) UserSignups GET /signup supports js 
Failure/Error: visit signup_path 
LoadError: 
    no such file to load -- { 
    "frozen": { 
     "app.update.auto": false, 
     "app.update.enabled": false, 
     "browser.download.manager.showWhenStarting": false, 
     "browser.EULA.override": true, 
     "browser.EULA.3.accepted": true, 
     "browser.link.open_external": 2, 
     "browser.link.open_newwindow": 2, 
     "browser.offline": false, 
     "browser.safebrowsing.enabled": false, 
     "browser.safebrowsing.malware.enabled": false, 
     "browser.search.update": false, 
     "browser.sessionstore.resume_from_crash": false, 
     "browser.shell.checkDefaultBrowser": false, 
     "browser.tabs.warnOnClose": false, 
     "browser.tabs.warnOnOpen": false, 
     "devtools.errorconsole.enabled": true, 
     "dom.disable_open_during_load": false, 
     "extensions.autoDisableScopes": 10, 
     "extensions.logging.enabled": true, 
     "extensions.update.enabled": false, 
     "extensions.update.notifyUser": false, 
     "network.manage-offline-status": false, 
     "network.http.phishy-userpass-length": 255, 
     "offline-apps.allow_by_default": true, 
     "prompts.tab_modal.enabled": false, 
     "security.fileuri.origin_policy": 3, 
     "security.fileuri.strict_origin_policy": false, 
     "security.warn_entering_secure": false, 
     "security.warn_entering_secure.show_once": false, 
     "security.warn_entering_weak": false, 
     "security.warn_entering_weak.show_once": false, 
     "security.warn_leaving_secure": false, 
     "security.warn_leaving_secure.show_once": false, 
     "security.warn_submit_insecure": false, 
     "security.warn_viewing_mixed": false, 
     "security.warn_viewing_mixed.show_once": false, 
     "signon.rememberSignons": false, 
     "toolkit.networkmanager.disable": true, 
     "toolkit.telemetry.prompted": 2, 
     "toolkit.telemetry.enabled": false, 
     "toolkit.telemetry.rejected": true 
    }, 
    "mutable": { 
     "browser.dom.window.dump.enabled": true, 
     "browser.startup.page": 0, 
     "browser.startup.homepage": "about:blank", 
     "dom.max_script_run_time": 30, 
     "dom.report_all_js_exceptions": true, 
     "javascript.options.showInConsole": true, 
     "network.http.max-connections-per-server": 10, 
     "webdriver_accept_untrusted_certs": true, 
     "webdriver_assume_untrusted_issuer": true 
    } 
    } 
+0

Ho esattamente lo stesso problema. Qualche informazione? – ubermensch

+1

Tracciandolo attraverso lo stack, sembra che la chiamata MultiJson.load (obj) nel file selenium-webdriver-2.21.2/lib/selenium/webdriver.rb stia lanciando LoadError. Quali versioni del selenio-webdriver, capybara e gemme multi-json stai usando? – ubermensch

+0

Ho selenio-web driver 2.21.2 e multi_json 1.1.0. –

risposta

7

Questo può anche essere risolto aggiornando multi_json all'ultima versione.

+0

Che ha funzionato. (aggiornamento bundle multi_json). –

1

Avevo lo stesso problema, la soluzione per me era cambiare l'unità che stavo usando. Così, per esempio:

scenario "answering the quiz for my recipient", :js => true, :driver => :rack_test do 
    click_button "Continue" 
end 

In questo modo sto usando il rack_test al posto del selenio webdrive (il valore predefinito di Capybara).

Spero che questo ti aiuti!

+1

Ma poi la specifica non eseguirà JS. Ha bisogno di un browser per gestire JS nelle specifiche, quindi cambiando il driver su: rack_test gli impedisce di avviare Firefox. Potrei sbagliarmi! –

9

ho avuto lo stesso problema ora per 3 giorni! mi stava facendo impazzire!

risposta breve: declassamento selenium-webdriver a 2.21.1

lunga spiegazione: dopo qualche scavare nel codice sorgente posso verificare il problema è selenium-webdriver2.21.2 all'interno di un'applicazione Rails (i test su rotaie 3.0.x personalmente).

la riga di codice può essere trovato qui http://code.google.com/p/selenium/source/browse/trunk/rb/lib/selenium/webdriver.rb?r=16651#78

la causa principale è in una applicazione Rails classe ActiveSupport::Dependencies::Loadable definisce un metodo livello classe denominata load su Object, quindi il controllo MultiJson.respond_to?(:load) restituisce sempre true ma è sbagliato Metodo load.

Problemi correlati