2014-01-23 5 views
7

У меня есть форма, которая генерируется простой форма:Капибары выбрать метод Невозможно найти кнопку радио

TL TR 
<div class="form-group radio_buttons required user_register_temp_package"> 
    <label class="radio_buttons required control-label"> 
    <abbr title="zorunlu"> 
     * 
    </abbr> 
    Paket 
    </label> 
    <label class="radio"> 
    <input class="radio_buttons required" id="user_register_temp_attributes_domain_package_id_1" name="user[register_temp_attributes][domain_package_id]" type="radio" value="1"> 
    Small 
    </label> 
    <label class="radio"> 
    <input checked="checked" class="radio_buttons required" id="user_register_temp_attributes_domain_package_id_2" name="user[register_temp_attributes][domain_package_id]" type="radio" value="2"> 
    Medium 
    </label> 
    <label class="radio"> 
    <input class="radio_buttons required" id="user_register_temp_attributes_domain_package_id_3" name="user[register_temp_attributes][domain_package_id]" type="radio" value="3"> 
    Large 
    </label> 
</div> 
TL TR 

У меня есть простая спецификация, как это:

# encoding: UTF-8 
require 'spec_helper' 

feature 'Register' do 

    background do 
    visit new_user_registration_path 
    end 

    scenario 'fill register form and register' do 
    # TL TR 
    choose('user_register_temp_attributes_domain_package_id_1') 
    # TL TR 
    end 

end 

Мой spec_helper.rb является

ENV['RAILS_ENV'] ||= 'test' 
require File 

.expand_path('../../config/environment', __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/rspec' 

Capybara.javascript_driver = :webkit 
Capybara.default_selector = :css 

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } 

ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 

RSpec.configure do |config| 
    # ## Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = 'random' 

    # Capybara DSL 
    config.include Capybara::DSL 

    # Factory girl 
    config.include FactoryGirl::Syntax::Methods 

end 

водосвинка API для метода choose говорит:

"Find a radio button and mark it as checked. The radio button can be found via name, id or label text."

Но когда я бегу спецификации с choose('user_register_temp_attributes_domain_package_id_1'), я получаю Capybara::ElementNotFound: Unable to find radio button "user_register_temp_attributes_domain_package_id_1"

Я попытался код ниже, но получил Capybara::ElementNotFound: Unable to find css "user_register_temp_attributes_domain_package_id_1" ошибку:

find('#user_register_temp_attributes_domain_package_id_1[value=1]').set(true)

Кажется, нет никаких проблем с fill_in , check или click_button методов.

С уважением.

ответ

13

Скорее всего, базовый драйвер считает, что этот переключатель не виден. По умолчанию Capybara находит только видимые элементы (по умолчанию Capybara.ignore_hidden_elements - true), поэтому он не нашел этого элемента.

Try:

choose('user_register_temp_attributes_domain_package_id_1', visible: false) 

Вы можете улучшить сообщение об ошибке, отправив запрос на тянущий к Капибара.

+0

Благодарим вас за ответ, но ничего не изменилось. С уважением. – onurozgurozkan

+1

@onurozgurozkan Попробуйте 'page.execute_script (" document.getElementById ('user_register_temp_attributes_domain_package_id_1'). Checked = true ")' –

+0

Он работает. Но это нелогично, почему выбор не работает. Я проверю HTML-проверку страницы и многое другое. Большое спасибо. – onurozgurozkan

Смежные вопросы