views:

444

answers:

2

I'm trying to define a step to test the value of alt text of an image using capybara and the css selectors.

I wrote one for input values based on the readme examples:

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

But I can't figure this one out...something like:

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

Anyone know how I can locate the alt text value?

+1  A: 

I believe the value method returns the value of input fields and cannot be used to test an attribute.

Something like this might work instead:

page.should have_css("img[alt=the_alt_text_you_are_expecting]")
henning-koch
+3  A: 

Capybara uses xpath by default, so unless you changed that setting, that could be part of your problem. (You could use locate(:css, "img[alt]")).

I would write the tests using xpath to look something like this:

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
Eliza
Thanks Eliza - I did change the default setting as we mostly use the CSS selectors
kinet