Fondamentalement, ce que j'essaie de faire, c'est de cliquer sur un bouton qui devient visible lors du survol d'un autre élément (son parent).
J'ai essayé d'utiliser trigger.('mouseover')
sur le parent du bouton caché, mais cela ne semble pas fonctionner.
Voici un extrait de code de la spécification:
# label[for ... ] -> the parent element
page.execute_script("$('label[for=\"department_#{department.id}\"]').trigger(\"mouseover\")")
# le hidden button
find(".actions").click
# some <li> on a list that drops down when clicking the hidden button
click_on("Edit department")
Et l'erreur ...
Failure/Error: click_on("Edit department")
Selenium::WebDriver::Error::ElementNotVisibleError:
Element is not currently visible and so may not be interacted with
Je voudrais savoir comment faire le .actions
bouton visible sur la page, pour le cliquer ensuite.
Toute aide serait très appréciée.
Capybara fournit Element#hover
méthode à partir de la version 2.1:
find('.some_class').hover
Cette méthode est implémentée dans Capybara::Selenium::Driver
de la même manière que dans la réponse de @ AlexD.
Notez que pour utiliser #hover
dans Selenium il est généralement préférable d'activer les événements natifs :
Capybara.register_driver :Selenium do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
profile.native_events = true
Capybara::Selenium::Driver.new(app, :browser => :firefox, profile: profile)
end
Alex a décrit la solution de ces problèmes dans son blog: consultez-la http://aokolish.me/blog/2012/01/22/testing-hover-events-with-capybara
RSpec.configure do |config|
# ...
Capybara.javascript_driver = :webkit
end
page.find('#element').trigger(:mouseover)
J'ai trouvé un moyen de simuler le "survol de la souris" en utilisant Capybara + le pilote Selenium:
module Capybara
module Node
class Element
def hover
@session.driver.browser.action.move_to(self.native).perform
end
end
end
end
En utilisant Capybara + Selenium, il est possible d'utiliser "hover" avec cette commande:
page.driver.browser.action.move_to(page.find('YourElement').native).perform