3

我有一个网页,上面有一个名为“删除”的表单按钮,以及一个包含以下内容的 cuke 场景:

And I should see "delete"

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

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

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

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

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

为什么 webrat 找不到表单按钮?我在表单字段中也遇到了同样的问题,例如页面加载时在其中有值的文本输入,但 webrat 说那里什么都没有。在 Safari 中查看它再次显示该字段中确实包含正确的文本。

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

4

4 回答 4

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 声称在使用语法时支持CSS3 选择器来匹配 HTML 元素。have_selector

于 2010-04-15T03:46:04.773 回答
1

致莱昂纳多:

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

Then /^I should see a button with a value of "([^\"]*)"$/ do |value|
  response.should have_selector("form input[value='#{value}']")
end
于 2010-09-19T17:44:06.443 回答
0

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

于 2010-04-15T03:52:11.170 回答
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
于 2011-08-30T19:09:24.363 回答