web-dev-qa-db-fra.com

Concombre et Capybara, en cliquant sur un élément autre qu'un lien ou un bouton

J'essaie de tester un éditeur in-situ en utilisant une pile concombre/capybara/sélénium, mais le problème est que l'éditeur est activé en cliquant sur un div et non sur un lien ou un bouton. Je n'arrive pas à comprendre comment amener Capybara à faire cela. Y-a-t'il une façon de le faire?

45
trobrock

Vous pouvez cliquer sur un élément via Capybara::Element.click . J'ajoute ce qui suit pour cela dans mon web_steps.rb afin de cliquer sur divs.

When /^(?:|I )click within "([^"]*)"$/ do |selector|
  find(selector).click
end

Il y a aussi Element.trigger('mouseover') qui semble permettre le survol bien que ne fonctionnant pas avec Selenium.

Il est également très probable que vous aurez besoin de décorer votre fonction/scénario avec la balise @javascript fournie par Capybara.

62
Jim Mitchener

En plus de pouvoir cliquer sur des éléments de bouton comme @Jim Mitchener, vous pouvez également cliquer sur une partie du texte de la manière suivante:

# WhenI click on the text "Sign in"
When(/^I click on text "(.*?)"$/) do |text|
  click_text(text)
end

def click_text(text)
  elem = find(:xpath, "//*[contains(translate(text(), '#{text.upcase}', '#{text.downcase}'), '#{text.downcase}')]", match: :first, wait: false)
  scroll_to(elem, -200)
  elem.click
end

Cette fonction d'assistance fait la même chose que find(selector).click, elle trouve l'élément de texte.

J'ai trouvé cet article très bien, il explique différents types d'étapes que vous pouvez écrire en concombre.

0
Nesha Zoric