2012-04-26 17 views
8

Khi tôi đặt một trong các thử nghiệm rspec của mình thành: js => true, tôi nhận được lỗi sau. Tôi đang sử dụng các phiên bản sau:Capybara + Selenium + RSpec - LoadError khi đặt JS thành true

Rails - 3.2.2
RSpec - 2.9.0
Capybara - 1.1.2

Theo các tài liệu, Capybara nên chạy bất kỳ thông số kỹ thuật sử dụng: js => đúng thông qua Selenium. Tôi đã thử thêm Selenium vào Gemfile của tôi, trong trường hợp Capybara không thể tìm thấy nó nhưng điều đó không hiệu quả.

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

Tôi có cùng một vấn đề chính xác. Bất cứ thông tin nào? – ubermensch

+1

Theo dõi nó xuống qua ngăn xếp, có vẻ như cuộc gọi MultiJson.load (obj) trong tệp selenium-webdriver-2.21.2/lib/selenium/webdriver.rb đang ném LoadError. Phiên bản nào của selenium-webdriver, capybara và đá quý multi-json bạn đang sử dụng? – ubermensch

+0

Tôi có selenium-webdriver 2.21.2 và multi_json 1.1.0. –

Trả lời

7

Điều này cũng có thể được giải quyết bằng cách nâng cấp multi_json lên phiên bản mới nhất.

+0

Điều đó đã hiệu quả. (gói cập nhật multi_json). –

1

Tôi gặp sự cố tương tự, giải pháp cho tôi đã thay đổi ổ đĩa mà tôi đang sử dụng. Vì vậy, ví dụ:

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

Bằng cách này tôi đang sử dụng rack_test thay vì selen-WebDrive (mặc định là Capybara).

Hy vọng điều này sẽ giúp bạn!

+1

Nhưng sau đó thông số kỹ thuật sẽ không chạy JS. Nó cần một trình duyệt để xử lý JS trong thông số kỹ thuật của bạn, vì vậy việc thay đổi trình điều khiển thành: rack_test ngăn cản trình duyệt khởi chạy Firefox. Tôi có thể sai! –

9

tôi đã gặp sự cố tương tự trong 3 ngày! nó đã khiến tôi phát điên!

trả lời ngắn gọn: hạ cấp selenium-webdriver để 2.21.1

lời giải thích dài: sau khi một số đào vào mã nguồn tôi có thể xác minh vấn đề là selenium-webdriver2.21.2 bên trong một ứng dụng Rails (i thử nghiệm trên đường ray 3.0.x cá nhân).

dòng vi phạm của mã có thể được tìm thấy ở đây http://code.google.com/p/selenium/source/browse/trunk/rb/lib/selenium/webdriver.rb?r=16651#78

nguyên nhân gốc rễ là trong một Rails app lớp ActiveSupport::Dependencies::Loadable định nghĩa một phương pháp trình độ lớp được gọi là load trên Object, do đó việc kiểm tra MultiJson.respond_to?(:load) luôn trả true nhưng nó sai load.

Các vấn đề liên quan