Webrat说它无法找到一些文本,但文本实际上就在那里

时间:2010-04-15 00:11:11

标签: ruby-on-rails testing cucumber webrat

我的网页上有一个名为“删除”的表单按钮,以及一个包含以下行的cuke方案:

And I should see "delete"

当我运行场景时,我收到此错误:

expected the following element's content to include "delete"

...它将webrat页面转储到stdout,而“删除”实际上并不存在。到现在为止还挺好。但是,当我告诉webrat在错误发生之前向我显示页面时:

Then show me the page
And I should see "delete"

... Safari启动并向我显示页面,在Safari中有“删除”按钮,完全在那里。

为什么webrat没有找到表单按钮?我在表单字段中也存在同样的问题,例如文本输入在页面加载时具有值,但是webrat说没有任何内容。再次在Safari节目中看到它,该字段确实包含正确的文本。

这是一个错误,还是webrat不适合检查表单元素?有没有不同的方法来做到这一点?谢谢!

4 个答案:

答案 0 :(得分:2)

您可以通过编写自己的步骤定义来检查表单元素。例如,要查找值为“delete”的按钮,请将您的功能编写为:

And I should see a button with a value of "delete"

以及:

的步骤定义
Then /^I should see a button with a value of "([^\"]*)"$/ do |value|
  response.should have_selector("form input[value=#{value}]")
end

作为旁注,您会注意到如果您的自定义步骤失败,它将转储整个响应,然后您将看到表单元素。我不完全确定为什么会这样,但显然当你写“我应该看到......”时,Cucumber不符合表单元素的值。

Webrat声称在使用have_selector语法时支持CSS3 selectors匹配HTML元素。

答案 1 :(得分:1)

致莱昂纳多:

对于包含空格的按钮标签,您需要在引号中加入value,如下所示:

Then /^I should see a button with a value of "([^\"]*)"$/ do |value|
  response.should have_selector("form input[value='#{value}']")
end

答案 2 :(得分:0)

检查您正在测试的HTML是否有效

答案 3 :(得分:0)

如果有其他人遇到这个。上述答案对我不起作用(不确定原因),但以下情况确实如此。

Then /^I should see a button with "([^"]*)"$/ do |button_text|
  if page.respond_to? :should
    page.should have_xpath("//input[contains(@value,'#{button_text}')]")
  else
    assert page.has_xpath?("//input[contains(@value,'#{button_text}')]")
  end
end