2010-05-14 6 views
7

J'essaie de définir une étape pour tester la valeur du texte alt d'une image en utilisant des sélecteurs Capybara et CSS.Comment tester une valeur d'image alt en utilisant capybara?

J'ai écrit une pour les valeurs d'entrée en fonction des exemples readme:

Then /^I should see a value of "([^\"]*)" within the "([^\"]*)" input$/ do |input_value, input_id| 
    element_value = locate("input##{input_id}").value 
    element_value.should == input_value 
end 

Mais je ne peux pas comprendre cela ... quelque chose comme:

Then /^I should see the alttext "([^\"]*)"$/ do | alt_text | 
    element_value = locate("img[alt]").value 
end 

Quelqu'un sait comment je peux localiser la valeur du texte alt?

Répondre

12

Capybara utilise XPath par défaut, sauf si vous avez modifié ce paramètre, qui pourrait faire partie de votre problème. (Vous pouvez utiliser locate(:css, "img[alt]")).

J'écrire des tests utilisant XPath pour ressembler à quelque chose comme ceci:

Then /^I should see the alt text "([^\"]*)"$/ do | alt_text | 
    page.should have_xpath("//img[@alt=#{alt_text}]") 
end 

Then /^I should see a value of "([^\"])" within the "([^\"])" input$/ do |input_value, input_id| 
    page.should have_xpath("//input[@id=#{input_id} and text()=#{input_value}] 
end 
+0

Merci Eliza - J'ai changé le réglage par défaut car nous utilisons principalement les sélecteurs CSS – kinet

9

Je crois que la méthode value renvoie la valeur des champs de saisie et ne peut pas être utilisée pour tester un attribut.

Quelque chose comme cela pourrait fonctionner à la place:

page.should have_css("img[alt=the_alt_text_you_are_expecting]") 
7

une autre variation sur le thème:

Then /^I should see the image alt "([^"]*)"$/ do |alt_text| 
    page.should have_css('img', :alt => alt_text) 
end 
+0

Très simple, mais cela n'a pas fonctionné pour moi. (RSpec 3.0 + Capybara 2.4) –

0

Je ne suis pas sûr de la méthode que vous utilisez pour trouver l'image, mais cela fonctionne pour moi:

expect(find_by_id("image-1")[:alt]).to have_content('tree') 

Une fois que vous avez l'élément le [:"tag"] vous donnera la valeur.

$thing = find_by_id("image-1")[:alt] 

va mettre la chose à la valeur si vous avez des tests plus complexes.

Questions connexes