使用 simple_form 时如何在 Capybara 测试中选中复选框
How to check a check box in Capybara test when using simple_form
尝试在简单页面中测试某些功能,但在使用 page.check:
时出现此错误
Failures:
1) searching for stores serving a taco and a sauce: Adobada tacos with Chile de Arbol sauce
Failure/Error: page.check 'Adobada'
Capybara::ElementNotFound:
Unable to find checkbox "Adobada"
# ./spec/views/store_search_spec.rb:8:in `block (2 levels) in <top (required)>'
这是我的 HTML:
<%= simple_form_for :stores, url: stores_path, method: :get do |f| %>
<%= f.label :tacos, 'Select Tacos to Find: ', class: 'label' %>
<div class='taco-select checkboxes'>
<%= f.collection_check_boxes :tacos, Taco.order(:name), :id, :name,
:include_hidden => false, :item_wrapper_class => 'checkbox_container' %>
</div>
<%= f.label :salsa, 'Select Sauces to Find: ', class: 'label' %>
<div class='salsa-select checkboxes'>
<%= f.collection_check_boxes :salsas, Salsa.order(:name), :id, :name,
:include_hidden => false, :item_wrapper_class => 'checkbox_container' %>
</div>
<%= f.submit 'Search!' %>
<% end %>
这是我的测试:
require 'rails_helper'
feature 'searching for stores', %(serving a taco and a sauce:) do
scenario 'Adobada tacos with Chile de Arbol sauce' do
visit root_path
page.check 'Adobada'
page.check 'Chile de Arbol'
click_button 'Search!'
expect(page).to have_content "Store"
expect(page).to have_content 'City'
end
end
我想测试一下,当某些复选框设置为 true 时,页面中会呈现特定内容。
不知道如何解决这个问题。
试试这些,它们应该适合你:
find(:css, "#YOUR_CHECKBOX_ID").set(true)
或
page.check('YOUR_CHECKBOX_ID')
或者干脆
find('THE CSS SELECTOR OF YOUR CHECKBOX').click
find(:xpath, 'THE XPATH OF YOUR CHECKBOX').click
您不必使用 ID 来选中复选框。您可以只使用复选框上的标签。假设您有一个这样的复选框
<label for="...">
<input type="checkbox" name="...">Something</label>
你'check'它在水豚里就这样
it "" do
page.check 'Something'
end
可以找到官方文档here
尝试在简单页面中测试某些功能,但在使用 page.check:
时出现此错误 Failures:
1) searching for stores serving a taco and a sauce: Adobada tacos with Chile de Arbol sauce
Failure/Error: page.check 'Adobada'
Capybara::ElementNotFound:
Unable to find checkbox "Adobada"
# ./spec/views/store_search_spec.rb:8:in `block (2 levels) in <top (required)>'
这是我的 HTML:
<%= simple_form_for :stores, url: stores_path, method: :get do |f| %>
<%= f.label :tacos, 'Select Tacos to Find: ', class: 'label' %>
<div class='taco-select checkboxes'>
<%= f.collection_check_boxes :tacos, Taco.order(:name), :id, :name,
:include_hidden => false, :item_wrapper_class => 'checkbox_container' %>
</div>
<%= f.label :salsa, 'Select Sauces to Find: ', class: 'label' %>
<div class='salsa-select checkboxes'>
<%= f.collection_check_boxes :salsas, Salsa.order(:name), :id, :name,
:include_hidden => false, :item_wrapper_class => 'checkbox_container' %>
</div>
<%= f.submit 'Search!' %>
<% end %>
这是我的测试:
require 'rails_helper'
feature 'searching for stores', %(serving a taco and a sauce:) do
scenario 'Adobada tacos with Chile de Arbol sauce' do
visit root_path
page.check 'Adobada'
page.check 'Chile de Arbol'
click_button 'Search!'
expect(page).to have_content "Store"
expect(page).to have_content 'City'
end
end
我想测试一下,当某些复选框设置为 true 时,页面中会呈现特定内容。 不知道如何解决这个问题。
试试这些,它们应该适合你:
find(:css, "#YOUR_CHECKBOX_ID").set(true)
或
page.check('YOUR_CHECKBOX_ID')
或者干脆
find('THE CSS SELECTOR OF YOUR CHECKBOX').click
find(:xpath, 'THE XPATH OF YOUR CHECKBOX').click
您不必使用 ID 来选中复选框。您可以只使用复选框上的标签。假设您有一个这样的复选框
<label for="...">
<input type="checkbox" name="...">Something</label>
你'check'它在水豚里就这样
it "" do
page.check 'Something'
end
可以找到官方文档here