capybara-webkit-kann nicht simulieren, klicken Sie auf (nicht link/button) element
In einem rspec feature Szenario habe ich:
scenario 'shows things', js: true do
page.find('#my_div').trigger(:click)
Scheint dies nicht, um das Feuer der jQuery-handler, der auf das click-Ereignis dieses element. Im debugger gibt dieser Aufruf mit einem leeren string "".
Sollte capybara-webkit in der Lage sein zu simulieren, die Maus-Ereignisse mit jQuery-Handler auslösen ajax-Anfragen, die update-dom? Wenn ja, irgendwelche Vorschläge für diesen Fall?
Ich wechselte von selenium-webdriver, weil das Wasserschwein #trigger-Methode wird nicht unterstützt.
Und versuchen, trigger-das jQuery-event-direkt wirft einen Fehler:
page.execute_script "$('#masthead .fclass').trigger('click')"
gibt
Capybara::Webkit::InvalidResponseError:
Javascript failed to execute
Mein gemfile hat
group :test do
gem 'capybara'
gem "database_cleaner", "~> 0.9.1"
gem 'capybara-webkit', git: 'git://github.com/thoughtbot/capybara-webkit.git'
gem 'launchy'
end
Ich bin mit 'edge' capybara-webkit-als ich auf einen Fehler mit einem xpath-Fehler anderweitig (v2.04?).
Ich habe nicht in der Lage zu bekommen ein Protokoll von der javascript-Fehler, wenn ich habe versucht, hinzufügen rack Ausnahmen in spec/spec_helper.rb:
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'rack/utils'
Capybara.app = Rack::ShowExceptions.new(MyApp::Application)
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
#...
Capybara.javascript_driver = :webkit
config.before (scope = :suite) do
%x[bundle exec rake assets:precompile]
end
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.before(:each) do
DatabaseCleaner.clean
end
config.infer_base_class_for_anonymous_controllers = false
end
Update:
Ich ersetzte capybara-webkit-mit
gem 'poltergeist'
Und in spec/spec_helper.rb:
require 'capybara/poltergeist'
...
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, { debug: true })
end
Capybara.javascript_driver = :poltergeist
Capybara.current_driver = :poltergeist
Bekomme ich diese Fehlermeldungen in der Konsole von der Seite("#my_id").trigger('click'):
...
{"name"=>"click", "args"=>[3, 2]}
poltergeist [1366370900594] state default -> mouse_event
poltergeist [1366370900596] state mouse_event -> loading
Not allowed to load local resource: file:///home/me/rails/my_app/public/assets_test/application.css
...
Not allowed to load local resource: file:///home/me/rails/my_app/public/assets_test/application.js
Ich habe versucht chmod der poltergeist gem Berechtigungen, aber Gleiches Ergebnis.
Und versucht zu starten-Seite.execute_script(%F($("my_id").trigger('click')))
gibt ein jQuery undefined type error:
ReferenceError: Can't find variable: $
at phantomjs://webpage.evaluate():1
at phantomjs://webpage.evaluate():1
at phantomjs://webpage.evaluate():1
at phantomjs://webpage.evaluate():1
- Sie haben leere Elemente im Selektor? Es könnte sein, diesen bug: github.com/thoughtbot/capybara-webkit/issues/494
- poltergeist ist ein headless browser, hast du mal versucht, öffnen Sie die Seite in Ihrem browser, so dass Sie sehen können, welche Elemente auf der Seite? Sie können einfache call "save_and_open_page" in Ihrer Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Problemen, die ich hatte und Lösungen:
1) Capybara trigger () - Methode nicht unterstützt wird mit selenium-webdriver oder capybara-webkit.
page.execute_script(%Q($("#...
obwohl dies nicht so nützlich, wie es könnte das Ereignis auslösen, auf ein element, das nicht für den Benutzer sichtbar.2)
save_and_open_page
nicht mit der asset-pipeline, damit ist ziemlich nutzlos, wenn Sie haben versteckte klickbare Elemente. Die poltergeist-Treiber hat save_screenshot, die funktioniert, aber es ist nicht so nützlich wie eine echte browser-Seite mit den assets geladenLösung: precompile Vermögenswerte im test, obwohl ich konnte nicht Holen Sie sich jQuery zu laden mit jedem Treiber ($"ist undefiniert) und poltergiest/phantomjs nicht Zugriff auf lokale kompilierten Dateien (übergabe von Kommandozeilen-Optionen, um den Treiber hat keine Wirkung)
bessere Lösung: verwenden Sie unveröffentlichte Capybara 2.1+
gem 'capybara', git: 'git://github.com/jnicklas/capybara.git'
fügen SieCapybara.asset_host = "http://localhost:3000"
zu spec_helper.rb und verlassen dev-server laufen3) capybara-webkit -
Error undefined method find_xpath for #<Capybara::Webkit::Driver
Bei der VerwendungCapybara.javascript_driver = :webkit
gem 'capybara-webkit', git: 'git://github.com/thoughtbot/capybara-webkit.git'
Mein set-up am Ende war Poltergeist (unterstützt trigger-Methode) + Capybara beta mit einem Vermögen serviert vom dev-server (nicht vorkompiliert) so save_and_open_page funktioniert.