html片段:
<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
Capybara成功找到了页面上的所有元素,但在页面中(由save_an_open_page生成)字段'task [content]'为空。
这里可能有什么问题?感谢
更新:
从这个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 %>
...
答案 0 :(得分:1)
更新:
封闭的标签(@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
也不会在实际字段中显示文本。在表单提交后,您确定将新任务添加到页面没有问题吗?
其他尝试:
within
块,看看它是否有效。id
中使用字段name
代替其fill_in
,即:fill_in "task_content", :with => "This is a new task"'
,看看是否有效。答案 1 :(得分:1)
我看不出测试代码和Capybara调用有什么问题。
在您的标记中,虽然您的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>
(我不确定在form
中嵌套tr
元素是严格合法的HTML,但也许您需要考虑使用表格的替代方法。“
我通常发现save_and_open_page
使用默认的Rack驱动程序非常可靠但你在这里运行JavaScript所以我猜你正在运行selenium或headless-webkit驱动程序。
答案 2 :(得分:0)