1 votes

Comment puis-je vérifier avec cucumber & webrat & selenium qu'un sélecteur/tag existe exactement deux fois dans une réponse ?

J'ai utilisé la définition des étapes suivantes avec le concombre et le webrat et tout a bien fonctionné :

Then /^I should see "([^\"]*)" worker in the workerlist/ do |number|
   response.should have_selector("td.worker_name", :count=>number)
end

Je suis maintenant passé à Selenium et, d'une manière ou d'une autre, le sélecteur have_selector ne prend plus le paramètre :count. J'obtiens l'erreur suivante :

ArgumentError: wrong number of arguments (2 for 1)   
./features/step_definitions/worker_generation_steps.rb:15:in `have_selector'

Ensuite, j'ai essayé d'utiliser assert_contain, mais je n'ai pas trouvé de regex qui vérifie le nombre exact. Malheureusement, la définition de l'étape suivante passe si le nombre de "class="worker_name"" est inférieur au nombre attendu.

Then /^I should see "([^\"]*)" worker in the workerlist/ do |number|
  assert_contain (/((.*)(class="worker_name"))#{number}/m)
end

Mes questions :

1.) Comment puis-je vérifier de la manière la plus simple que dans mon exemple "td.worker_name" apparaît exactement un certain nombre de fois ?

2.) S'il n'y a aucun moyen de contourner l'expression rationnelle : comment puis-je réécrire l'expression rationnelle ci-dessus de manière à vérifier le nombre exact de "class="worker_name"" ?

Merci beaucoup !

0voto

AutomatedTester Points 14713

Je n'ai aucune expérience de Ruby ou de Webrat mais la façon dont je procéderais est la suivante.

    begin
        assert_equal "2", @selenium.get_xpath_count("//td[@class='worker_name']")
    rescue Test::Unit::AssertionFailedError
        @verification_errors << $!

Pour l'instant, vous ne pouvez pas faire cela avec Selenium et les sélecteurs CSS, sauf si vous utilisez Selenium 2.

0voto

user283096 Points 31

Grâce à la réponse d'AutomatedTester, j'ai trouvé la solution suivante :

Then /^I should see "([^\"]*)" worker in the workerlist/ do |number|
    response.selenium.get_xpath_count("//td[@class='worker_name']").to_i.should be(number.to_i)
end

get_xpath_count n'est pas supporté directement par Webrat::Selenium:Matchers mais je peux y accéder via l'api Selenium sous-jacente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X