2010-05-14 4 views
7

Ich versuche, einen Schritt zu definieren, um den Wert von Alt-Text eines Bildes mit Capybara und CSS-Selektoren zu testen.Wie teste ich einen Bild alt Wert mit Capybara?

Ich schrieb einen für Eingangswerte auf der Grundlage der readme Beispiele:

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 

Aber ich kann dieses heraus nicht verstehen ... so etwas wie:

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

Wer weiß, wie kann ich Suchen Sie den Alt-Textwert?

Antwort

12

Capybara verwendet XPath standardmäßig so, wenn Sie diese Einstellung geändert wird, dass ein Teil des Problems sein könnte. (Sie könnten locate(:css, "img[alt]") verwenden).

Ich würde die Tests schreiben XPath mit so etwas wie folgt aussehen:

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

Danke Eliza - Ich habe die Standardeinstellung geändert, da wir hauptsächlich die CSS-Selektoren verwenden – kinet

9

Ich glaube, die value Methode gibt den Wert von Eingabefeldern zurück und kann nicht verwendet werden, um ein Attribut zu testen.

Etwas Ähnliches könnte stattdessen arbeiten:

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

eine weitere Variation des Themas:

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

Sehr einfach, aber das hat nicht für mich funktioniert. (RSpec 3.0 + Capybara 2.4) –

0

ich über die Methode nicht sicher bin, Sie verwenden finden Sie das Bild aber das funktioniert für mich:

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

Sobald Sie das Element haben die [:"tag"] gibt Ihnen den Wert.

wird die Sache auf den Wert setzen, wenn Sie komplexere Tests haben.