2011-08-14 2 views
8

J'ai un bouton sur une page qui n'apparaît que lorsque je survole un certain élément. Mais je n'arrive pas à comprendre comment l'émuler et ensuite cliquer sur le lien pour que je puisse le tester en utilisant Capybara et Selenium.hover mouse sur capybara

Répondre

5

Vous pouvez utiliser une étape définie sur mesure pour cela, comme:

When /^I click "([^"]*)" inside element "([^"]*)"$/ do |button, element_name| 

A l'intérieur, vous écrivez quelque chose comme:

begin 
    evaluate_script("$('#{element_name}').trigger('mouseover')") 
    rescue Capybara::NotSupportedByDriverError 
end 

Et puis vous cliquez sur ce bouton, vous voulez :)

+0

Malheureusement, cela ne fonctionne pas pour css: hover menus déroulants à base ... nous avons besoin d'une sorte de façon de se déplacer explicitement une souris faux autour de certaines choses ... – fringd

+0

Il devrait fonctionner IMHO . Essayez d'être plus explicite comme ceci: evaluate_script ("$ ('div # name> ul> li> a: contient (# {menu_name})'). Trigger ('mouseover')"). Afaik sélenium supporte le déplacement d'un curseur dans les dimensions x, y, mais ce n'est pas amusant;) – socjopata

+0

socjopata, quel pilote capybara utilisez-vous et êtes-vous sûr que vous utilisez css: hover et non javascript ou jquery .hover (. ..)? – fringd

0

J'ai trouvé un moyen de simuler "mouse hover" en utilisant Capybara + le pilote Selenium. Essayez ce code:

module Capybara 
    module Node 
    class Element 
     def hover 
     @session.driver.browser.action.move_to(self.native).perform 
     end 
    end 
    end 
end 
+0

Cela ne fonctionne pas –

+0

Fonctionne avec les pilotes Chrome et Firefox de Selenium. Vous devrez peut-être attendre une fraction de seconde après le vol stationnaire avant de répondre. Si cela ne fonctionne toujours pas, utilisez la gem 'debugger', insérez un appel à' debugger' dans l'un de vos tests Capybara, puis essayez de taper les commandes Selenium en regardant ce qui se passe dans la fenêtre du navigateur Chrome/FF. –

+0

Oh, dans FF vous devrez peut-être activer les événements natifs. C'est dans les documents de Selenium ... –

Questions connexes