Capybara选择(“单选按钮”)不起作用

时间:2014-01-13 06:22:08

标签: ruby-on-rails rspec radio-button capybara rspec-rails

我的观点快照:

<%= form_for @request do |f| %>
  <div class="form-group">
    <%= f.radio_button(:item, "Snow/waterproof shell (upper)") %>
    <%= f.label(:item, "Snow/waterproof shell (upper)") %>
    </br>
    <%= f.radio_button(:item, "Headlamp") %>
    <%= f.label(:item, "Headlamp") %>
  </div>

然而,在我的Rspec集成测试文件(spec / requests / requests_spec.rb)上,当我写的时(请注意,选择单选按钮是用户从列表中请求项目的表单的一部分,并且测试用于提交后生成的页面,应指明用户请求的项目)。我正在使用gem'rspec-rails','2.13.1'

describe "Requests" do
  subject { page }

  describe "new request" do
    before { visit root_path }

    describe "with valid information" do
      before do 
        choose("Snow/waterproof shell (upper)")
        click_button submit
      end

      it { should have_content("Snow/waterproof shell (upper)")
    end
  end
end

我总是得到错误:

←[31mFailure/Error:←[0m ←[31mchoose("Snow/waterproof shell (upper)")←[0m
←[31mCapybara::ElementNotFound←[0m:
←[31mUnable to find radio button "Snow/waterproof shell (upper)"←[0m
←[36m # ./spec/requests/requests_spec.rb:24:in `block (4 levels) in <top (required)>'←[0m

如果我尝试选择(“头灯”)或任何其他选项,则相同。聪明的人有什么想法?这似乎很容易......

2 个答案:

答案 0 :(得分:6)

我已多次遇到过这个问题。如果您根据dom中的ID选择表单元素,那么它更可靠:

before do 
  choose 'request_item_headlamp'
  click_button submit
end

如果不查看其他单选按钮会出现什么ID轨道,我无法分辨。只需在chrome中右键单击它,检查元素,然后将元素ID剪切并粘贴到测试中。

答案 1 :(得分:0)

我怀疑有时choose无法可靠地检查单选按钮,可能是因为动画正在进行中。

如果您怀疑这导致choose调用不可靠,请尝试禁用动画,例如在测试环境中将执行时间设置为0秒。或者,在测试中等待一段时间,以便完成动画。