无法检查Capybara中的复选框

时间:2014-09-13 06:43:24

标签: ruby-on-rails-4 checkbox rspec capybara

我刚刚做了一个save_and_open_page,所以这里是我试图点击进行集成测试的HTML。

<input id="tos" name="tos" type="checkbox" value="{:id=>"tos"}">
<label for="tos">I have read and agree to the <a href="/termsofservice" style="color:#428bca" target="_blank">Terms of Service</a>.</label>

代码:

<%= check_box_tag :tos, id: "tos" %>
<%= label_tag "tos", "I have read and agree to the #{link_to 'Terms of Service', terms_path, { style: "color:#428bca", target: "_blank" }}.".html_safe %>

以下是检查我尝试过的事情的所有失败方法

find(:xpath, "//*[@id='tos']").set(true)
check 'tos'
find("#tos").set(true)
check 'I have read and agree to the Terms of Service'
check 'I have read and agree to the "<a href="/termsofservice" style="color:#428bca" target="_blank">Terms of Service</a>".'            
find(:css, "#tos[value='{:id=>&quot;tos&quot;}']").set(true)
find(:css, "#tos[value='{:id=>'tos'}']").set(true)

为什么这么难......

根据评论确定更多上下文:

此规范的完整流程是:

      describe "something" do

        before do
          visit '/original'
          page.check("tos")
          fill_in 'signup_email1', :with => "test@example.com"
          click_button 'lend'
          save_and_open_page
          fill_in 'inventory_1', :with => 1
          click_button 'submit_lend'
        end

        it "should achieve some result" do
        ...
        end

      end

到目前为止我尝试过的每次尝试之后,错误信息只是

Failure/Error: fill_in 'inventory_1', :with => 1
 Capybara::ElementNotFound:
   Unable to find field "inventory_1"

因为它反映了当click_button 'lend'发生时,用户不会被定向到一个页面,以便在有inventory_1的地方出借事物,因为相反,他们会获得/original页面重新呈现并出现错误(通过save_and_open_page确认),说明在继续之前必须同意服务条款。

1 个答案:

答案 0 :(得分:0)

好吧让它工作......也许充其量这是一个糟糕的开发实践的提醒。在我写完页面代码之后,我写了我的测试(反过来我知道......)。在这种情况下,当我编写测试并写出check 'tos'时,我回到视图中并将id: 'tos'添加到check_box_tag。这是错误,check_box_tag的第二个参数是值,所以通过添加我使check_box_tag始终采用值tos而不是1如果选中,则0如果没有。

基本上,在规范中check 'tos'如果在视图中只有<%= check_box_tag "tos %>

,则可以正常工作