Ruby on rails 水豚不通过选择参数

Ruby on rails 水豚不通过选择参数,ruby-on-rails,capybara,Ruby On Rails,Capybara,我正在使用Capybara在Rails应用程序中测试表单 表单有2个选择框,每个框都有默认选项。当表单在开发和生产中提交时,这些选项作为参数传递,但出于某些原因,Capybara没有在测试中提交它们。Capybara正在查找选择框和选项OK,因为如果我在中放入不存在的选项,将抛出一个错误。但在提交表单时,Capybara不会将默认选项或选定选项作为参数传递 表单片段如下所示: account\u reservations\u path(account.id),remote:false,:htm

我正在使用Capybara在Rails应用程序中测试表单

表单有2个选择框,每个框都有默认选项。当表单在开发和生产中提交时,这些选项作为参数传递,但出于某些原因,Capybara没有在测试中提交它们。Capybara正在查找选择框和选项OK,因为如果我在中放入不存在的选项,将抛出一个错误。但在提交表单时,Capybara不会将默认选项或选定选项作为参数传递

表单片段如下所示:

account\u reservations\u path(account.id),remote:false,:html=>{:id=>'dates\u form})do | f |%>
“宽度:150px;”,默认值:Reservation::SOURCE\u OF_BOOKING[0]})%>
“宽度:100px;”})%>

根据您在测试期间使用的驱动程序和/或浏览器,无效的html可能/将被不同的解释。您拥有的表单片段将生成一个包含子元素的元素(您似乎还缺少日期元素周围的start
tr
元素)。元素不是元素的有效子元素,并且元素仅作为、和元素的子元素有效,因此要使代码段有效,必须是

<%= form_for(@reservation, :url => account_reservations_path(account.id), remote: false, :html=>{:id=>'dates_form'}) do |f| %>
  <table>       
    <tr>
      <td style:"text-align:center" colspan="2"><%= f.submit 'Submit Dates, Source of Booking & Room Preference', class: "btn btn-primary btn-sm" %></td>
    </tr>
    <tr>
      <td><%= f.text_field :check_in_date, id: check_in_date_id,  placeholder: "Check In Date" %></td>
      <td><%= f.text_field :check_out_date, id: check_out_date_id, placeholder: "Check Out Date" %></td>
    </tr>
    <tr>
      <td colspan="1"><%= f.select(:source_of_booking, Reservation::SOURCE_OF_BOOKING, {}, {:style => "width:150px;", default: Reservation::SOURCE_OF_BOOKING[0]})  %></td>
      <td>
        <%= f.select(:bed_preference, @bed_options, {}, {:style => "width:100px;"}) %></td>
    </tr>
   </table>
 <% end %>
account\u reservations\u path(account.id),remote:false,:html=>{:id=>'dates\u form})do | f |%>
“宽度:150px;”,默认值:Reservation::SOURCE\u OF_BOOKING[0]})%>
“宽度:100px;”})%>

如果没有有效的HTML,可能会认为某些字段实际上在表单之外,因此不会随表单一起提交。我猜您在开发和生产系统中使用了Chrome,因为它对无效表的解释要宽松得多,如果您在开发和生产系统上尝试firefox,您会发现它不起作用,因为它对无效表的解释要宽松得多。

取决于驱动程序和/或浏览器在测试过程中,无效的html可能/将被不同的解释。您拥有的表单片段将生成一个包含子元素的元素(您似乎还缺少日期元素周围的start
tr
元素)。元素不是元素的有效子元素,并且元素仅作为、和元素的子元素有效,因此要使代码段有效,必须是

<%= form_for(@reservation, :url => account_reservations_path(account.id), remote: false, :html=>{:id=>'dates_form'}) do |f| %>
  <table>       
    <tr>
      <td style:"text-align:center" colspan="2"><%= f.submit 'Submit Dates, Source of Booking & Room Preference', class: "btn btn-primary btn-sm" %></td>
    </tr>
    <tr>
      <td><%= f.text_field :check_in_date, id: check_in_date_id,  placeholder: "Check In Date" %></td>
      <td><%= f.text_field :check_out_date, id: check_out_date_id, placeholder: "Check Out Date" %></td>
    </tr>
    <tr>
      <td colspan="1"><%= f.select(:source_of_booking, Reservation::SOURCE_OF_BOOKING, {}, {:style => "width:150px;", default: Reservation::SOURCE_OF_BOOKING[0]})  %></td>
      <td>
        <%= f.select(:bed_preference, @bed_options, {}, {:style => "width:100px;"}) %></td>
    </tr>
   </table>
 <% end %>
account\u reservations\u path(account.id),remote:false,:html=>{:id=>'dates\u form})do | f |%>
“宽度:150px;”,默认值:Reservation::SOURCE\u OF_BOOKING[0]})%>
“宽度:100px;”})%>

如果没有有效的HTML,可能会认为某些字段实际上在表单之外,因此不会随表单一起提交。我猜您在开发和生产系统中使用了Chrome,因为它对无效表的解释要宽松得多,如果您在开发和生产系统上尝试firefox,您会发现它不起作用,因为它对无效表的解释要宽松得多。

您在水豚身上使用的驱动程序是什么?什么司机:你在用水豚吗?非常感谢汤姆,这显然是问题所在。我的元素在表单之外,我没有将它们包含在代码段中。我现在已经把这些带到表单中了,水豚现在成功地提交了选择框参数。@WillM不客气。供您参考--是表元素规范。从技术上讲,内容模型比我在回答中指定的稍多,但我的回答的精神是正确的。非常感谢Tom,这显然是问题所在。我的元素在表单之外,我没有将它们包含在代码段中。我现在已经把这些带到表单中了,水豚现在成功地提交了选择框参数。@WillM不客气。供您参考--是表元素规范。从技术上讲,内容模型比我在回答中指定的稍多,但我的回答的精神是正确的