2012-08-09 117 views
1

HTML片段:水豚FILL_IN不起作用

<table id="project_1"> 
    <thead> 
    ... 
    <tr> 
     <form accept-charset="UTF-8" action="/projects/1/tasks" class="add-task form-search" 
     data-remote="true" id="new_task" method="post"></form> 
     <th><input class="input-xlarge" id="task_content" name="task[content]" 
     placeholder="Start typing here to create a task..." size="50" type="text"></th> 
     <th><input class="btn" name="commit" type="submit" value="Add Task"></th> 
    </tr> 
    </thead> 
    ... 
</table> 

RSpec的测试与水豚:

it "should create a task", :js => true do 
    visit projects_path 
    within("#project_#{@project.id}") do 
    fill_in "task[content]", :with => "This is a new task" 
    save_and_open_page 
    click_button 'Add Task' 
    end 
    page.should have_content("This is a new task") 
end 

水豚顺利地找到网页上的所有元素,但在页面(由save_an_open_page产生)“任务[内容]”字段为空。

这里有什么问题?由于

UPDATE:

从这个ERB生成的HTML代码:

... 
<%= form_for [project, Task.new], html: { :class => "add-task form-search" }, remote: true do |f| %> 
    <th><%= f.text_field :content, :class => "input-xlarge", :placeholder => "Start typing here to create a task...", :size => 50 %></th> 
    <th><%= f.submit "Add Task", :class => "btn" %></th> 
<% end %> 
... 

回答

1

UPDATE:

封闭标签(由@Steve注意到)可能确实是你的问题。这里有人有同样的问题:form_for closes <form> tag

我怀疑问题可能是你的HTML标签的形式。如果你删除表行/头标记,像这样:

<%= form_for [project, Task.new], html: { :class => "add-task form-search" }, remote: true do |f| %> 
    <%= f.text_field :content, :class => "input-xlarge", :placeholder => "Start typing here to create a task...", :size => 50 %> 
    <%= f.submit "Add Task", :class => "btn" %> 
<% end %> 

看看是否能首先产生正确的HTML(与<form>标签包裹<input>标签,然后看看是否是规范通

原来的答案:

我怀疑,这个问题是不是与fill_in,但之后它(添加任务)。在我自己的测试,我发现save_and_open_page不显示在实际的字段中的文本会发生什么。即使测试确实有效,你确定有n在提交表单后将新任务添加到页面时出现问题?

其他的事情尝试:

  1. 取出within块,看看它是否工作。
  2. 尝试使用字段的id而不是namefill_in,即:fill_in "task_content", :with => "This is a new task"'并查看是否有效。
1

我看不出测试代码和水豚电话有什么问题。

在您的标记中,虽然看起来像您的input元素都在form之外,我期望包含它们。是否应该?:

<form accept-charset="UTF-8" action="/projects/1/tasks" class="add-task form-search" 
    data-remote="true" id="new_task" method="post"> 
    <th><input class="input-xlarge" id="task_content" name="task[content]" 
    placeholder="Start typing here to create a task..." size="50" type="text"></th> 
    <th><input class="btn" name="commit" type="submit" value="Add Task"></th> 
</form> 

(我不知道,一个tr嵌套在一个form元素是严格的法律HTML,但这样也许你需要考虑替代使用表格)。

我通常发现save_and_open_page相当可靠的默认Rack驱动程序,但你在这里运行JavaScript,所以我猜你正在运行硒或无头webkit驱动程序。

+0

从ERB生成的HTML代码,看看更新 – megas 2012-08-09 23:37:58

+0

行,所以你已经包装的形式包装输入的元素,所以看起来并不像这就是问题所在。 – Steve 2012-08-10 06:43:20