Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Webrat说它可以';我找不到一些文字,但文字确实在那里_Ruby On Rails_Testing_Cucumber_Webrat - Fatal编程技术网

Ruby on rails Webrat说它可以';我找不到一些文字,但文字确实在那里

Ruby on rails Webrat说它可以';我找不到一些文字,但文字确实在那里,ruby-on-rails,testing,cucumber,webrat,Ruby On Rails,Testing,Cucumber,Webrat,我有一个网页,上面有一个名为“删除”的表单按钮,还有一个cuke场景,其中有一行: And I should see "delete" 当我运行该场景时,会出现以下错误: expected the following element's content to include "delete" …它将webrat页面转储到标准输出,而“删除”实际上并不存在。到现在为止,一直都还不错。但是,当我告诉webrat在错误发生之前显示页面时: Then show me the page And I s

我有一个网页,上面有一个名为“删除”的表单按钮,还有一个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中查看它再次表明,字段中确实有正确的文本


这是一个bug,还是webrat不适合检查表单元素?有没有其他方法可以做到这一点?谢谢

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

我应该看到一个值为“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_选择器语法时支持匹配HTML元素。

检查您测试的HTML是否对Leonardo有效

对于带有空格的按钮标签,需要在引号中包含
,如下所示:

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

万一有人碰到这个。上面的答案对我不起作用(不知道为什么),但下面的答案起作用了

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

首先,我想你可能已经使用了图像按钮(可能不是故意的,因为某些框架),但当你提到输入时,我就这么做了。我使用了你的解决方案一段时间,效果很好,但我意外地发现,它似乎不适用于多个词值,如“删除它”,解决方案?似乎regexp应该与空格一起工作,也许matcher语法有问题——这将有助于查看您正在使用的实际代码。也许你可以把这个问题作为一个新问题发布?