8

我正在尝试定义一个步骤来使用 Capybara 和 CSS 选择器测试图像的 alt 文本的值。

我根据自述文件示例为输入值编写了一个:

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

但我无法弄清楚这个......就像:

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

任何人都知道我如何找到替代文本值?

4

4 回答 4

12

Capybara 默认使用 xpath,因此除非您更改该设置,否则这可能是您的问题的一部分。(您可以使用locate(:css, "img[alt]"))。

我会使用 xpath 编写测试,看起来像这样:

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
于 2010-05-17T16:09:49.363 回答
10

我相信该value方法返回输入字段的值,不能用于测试属性。

像这样的东西可能会起作用:

page.should have_css("img[alt=the_alt_text_you_are_expecting]")
于 2010-05-15T06:27:38.133 回答
7

主题的另一个变体:

Then /^I should see the image alt "([^"]*)"$/ do |alt_text|
  page.should have_css('img', :alt => alt_text)
end
于 2011-06-11T01:55:58.593 回答
0

I'm not sure about the method you're using to find the image but this works for me:

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

Once you have the element the [:"tag"] will give you the value.

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

will set thing to the value if you have more complex tests.

于 2013-06-14T15:34:43.273 回答