2015-09-11 2 views
0

У меня есть следующий вид:водосвинка/селеном form_tag - элемент не найден

<div class="row search-area" id="test"> 
    <%= form_tag search_index_path, method: :get do %> 
    <div class="small-12 medium-1 large-1 columns search-field"> 
    <%= label_tag "From", nil, class: "right inline" %> 
    </div> 
    <div class="small-12 medium-2 large-2 columns search-field"> 
    <%= text_field_tag(:start_date, params[:start_date], :value => "yyyy-mm-dd", :class => "datepicker") %> 
    </div> 
    <div class="small-12 medium-1 large-1 columns search-field"> 
    <%= label_tag "To", nil, class: "right inline" %> 
    </div> 
    <div class="small-12 medium-2 large-2 columns search-field"> 
    <%= text_field_tag(:end_date, params[:end_date], :value => "yyyy-mm-dd", :class => "datepicker") %> 
    </div> 
    <div class="small-12 medium-1 large-1 columns search-field"> 
    <%= label_tag "Guests", nil, class: "right inline" %> 
    </div> 
    <div class="small-12 medium-2 large-2 columns search-field"> 
    <%= number_field(:number_of_guests, params[:number_of_guests], in: 1.0..20.0, step: 1.0) %> 
    </div> 
    <div class="small-12 medium-3 large-3 columns"> 
    <%= submit_tag "Search", name: nil, :class => "button" %> 
    </div> 
    <% end %> 
</div> 

Я пытаюсь написать несколько функций спецификации, чтобы убедиться, что поисковые работы, как ожидалось. Я довольно новыми для этого, но после прочтения нескольких учебников я закончил с следующим испытанием:

describe "search form works" do 
    context "search", :driver => :selenium do 
    it "searches bookings for hosts" do 
     visit root_url 
     fill_in 'start_date', with: "2015-06-01" 
     fill_in 'end_date', with: "2015-06-07" 
     select "1", :from => 'number_of_guests' 
     click_button 'Search' 

     expect(page).to have_content 'Mr Host 5' 
    end 
    end 
end 

Проблема заключается в том, что, когда я бегу моих тестов я получаю следующее сообщение об ошибке:

Failures: 

    1) search form works search searches bookings for hosts 
    Failure/Error: fill_in 'start_date', with: "2015-06-01" 
    Capybara::ElementNotFound: 
     Unable to find field "start_date" 
    # ./spec/features/search_spec.rb:7:in `block (3 levels) in <top (required)>' 

Является ли проблема с использованием form_tag (все примеры и учебные пособия, которые я прочитал/наблюдал, использовали «form_tag»)?

ответ

0

Принимая у вас мнение от класса «datepicker», которое у вас есть на каждом из полей даты. Являются ли эти поля преобразованы в вид виджетов, зависящих от javascript? Если это так, и вы посмотрите на фактический html на странице, как только поля будут преобразованы, вы, скорее всего, увидите, что поля ввода с именами «start_date» и «end_date» на самом деле скрыты. Capybara по умолчанию не находит поля, которые не видны на странице, потому что пользователь не сможет взаимодействовать с ними. Есть два пути решения этого - первый будет сказать Capybara, чтобы найти скрытые элементы слишком

fill_in 'start_date', visible: false, with: "2015-06-01" 

Это будет работать в некоторых водителях, но является довольно Hacky, так как он больше не копировать поведение пользователей. Второе решение состоит в том, чтобы фактически воспроизвести поведение пользователей, вызвав #click на элементах страницы, на которые пользователь должен был бы щелкнуть, чтобы ввести дату.

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