我的网页上有一个名为“删除”的表单按钮,以及一个包含以下行的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不适合检查表单元素?有没有不同的方法来做到这一点?谢谢!
答案 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